Sagit.Framework For IOS 自动布局教程:8、UIView通用事件:点击、双击、长按、拖动、滑动、屏幕边缘侧滑、定时事件。

网友投稿 417 2022-10-31


Sagit.Framework For IOS 自动布局教程:8、UIView通用事件:点击、双击、长按、拖动、滑动、屏幕边缘侧滑、定时事件。

前言:

前面介绍一些UI的基本用法,这节介绍一下UIView的通用事件。

通用事件在所有的UI上都可以使用。

定义:

示例用法1:直接事件

示例用法2:触发方法

[[STLastImageView image:@"btn_sign"] addClick:@"sign:"];//签到-(void)sign:(UIButton*)btn{。。。。。。。}

示例用法3:跳转控制器。

[[[STLastButton titleColor:ColorWhite] backgroundImage:@"btn_full_middle"] clickInterval:2];

使用示例:

[view onClick:^(UIView* view) { //... } enlarge:50 top:10 right:30 bottom:100]; [view addClick:@"方法名" enlarge:100];

2、UIView 事件:双击

定义:

#pragma mark 扩展系统事件 - 双击//!执行双击事件-(UIView*)dbClick;//!绑定事件 event:指定事件名称,也可以是控制器名称,也可以指向其它UI的事件,如:Age.click (Age是其它UI的name)-(UIView*)addDbClick:(NSString*)event;//!绑定事件 并指定target-(UIView*)addDbClick:(NSString *)event target:(UIViewController*)target;//!绑定事件 用代码块的形式-(UIView*)onDbClick:(OnViewClick)block;//!移除绑定双击事件

用法和单击一致。

3、UIView 事件:长按

定义:

typedef void(^OnLongPress)(id view);#pragma mark 扩展系统事件 - 长按//!执行长按事件-(UIView*)longPress;//!绑定事件 event:指定事件名称,也可以是控制器名称,也可以指向其它UI的事件,如:Age.click (Age是其它UI的name)-(UIView*)addLongPress:(NSString*)event;//!绑定事件 并指定target-(UIView*)addLongPress:(NSString *)event target:(UIViewController*)target;//!绑定事件 用代码块的形式-(UIView*)onLongPress:(OnLongPress)block;//!移除绑定长按事件

示例用法:

4、UIView 事件:拖动

定义:[PS:增加了允许拖动的方向]

typedef Bool(^OnViewDrag)(id view,UIPanGestureRecognizer *recognizer);#pragma mark 扩展系统事件 - 拖动//!执行拖动事件-(UIView*)drag;//!绑定事件 event:指定事件名称,也可以是控制器名称,也可以指向其它UI的事件,如:Age.drag (Age是其它UI的name)-(UIView*)addDrag:(NSString*)event;//!绑定事件 并指定target-(UIView*)addDrag:(NSString *)event target:(UIViewController*)target;//!绑定事件 用代码块的形式-(UIView*)onDrag:(OnViewDrag)block;-(UIView *)onDrag:(OnViewDrag)block direction:(DragDirection)direction//!移除绑定拖动事件

示例用法:

recognizer) { if(recognizer.state==UIGestureRecognizerStateEnded) { if(view.frame.origin.x>view.OriginFrame.origin.x) { //左 NSLog(@"to left"); } else { //右 NSLog(@"to right"); } } return true; } direction:DragToLeftRight];

说明:

1、通过recognizer可以获取滑动的坐标、起始状态和结束状态。2、通过视图的原始坐标和现有坐标,可以判断拖动的方向。3、被拖动的UI元素默认会跟着手势一起动(return true),return false 则不会一起动。4、指定方向时,默认拖动结束,会还原位置到初始位置。

其它用法和上面的一致。

5、UIView 事件:滑动

定义:

typedef void(^OnViewSlide)(id view,UISwipeGestureRecognizer *recognizer);#pragma mark 扩展系统事件 - 滑动//!绑定事件 event:指定事件名称,也可以是控制器名称,也可以指向其它UI的事件,如:Age.drag (Age是其它UI的name)-(UIView*)addSlide:(NSString*)event;//!绑定事件 并指定target-(UIView*)addSlide:(NSString *)event target:(UIViewController*)target;//!绑定事件 用代码块的形式-(UIView*)onSlide:(OnViewSlide)block;//!移除绑定事件

示例用法:

id view, UISwipeGestureRecognizer *recognizer) { [Sagit.MsgBox prompt:STNumString(recognizer.direction)]; }];

可以获取手势滑动的方向。

6、屏幕边缘侧滑:左侧滑动 | 右侧滑动

【2020-09-12 追加】

定义:

#pragma mark 扩展系统事件 - 屏幕侧滑(左边缘滑动)//!绑定事件 event:指定事件名称,也可以是控制器名称,也可以指向其它UI的事件,如:Age.drag (Age是其它UI的name)-(UIView*)addScreenLeftEdgeSlide:(NSString*)event;//!绑定事件 并指定target-(UIView*)addScreenLeftEdgeSlide:(NSString *)event target:(UIViewController*)target;//!绑定事件 用代码块的形式-(UIView*)onScreenLeftEdgeSlide:(OnScreenEdgeSlide)block;//!移除绑定事件-(UIView*)removeScreenLeftEdgeSlide;#pragma mark 扩展系统事件 - 屏幕侧滑(右边缘滑动)//!绑定事件 event:指定事件名称,也可以是控制器名称,也可以指向其它UI的事件,如:Age.drag (Age是其它UI的name)-(UIView*)addScreenRightEdgeSlide:(NSString*)event;//!绑定事件 并指定target-(UIView*)addScreenRightEdgeSlide:(NSString *)event target:(UIViewController*)target;//!绑定事件 用代码块的形式-(UIView*)onScreenRightEdgeSlide:(OnScreenEdgeSlide)block;//!移除绑定事件

使用示例:

[[[[sagit addUIView:nil] width:1 height:400] toCenter] block:^(UIView* view) { [view onScreenLeftEdgeSlide:^(UIView* view, UIScreenEdgePanGestureRecognizer *recognizer) { if(recognizer.state==UIGestureRecognizerStateEnded || recognizer.state==UIGestureRecognizerStateCancelled) { [view backToOrigin];//回归原位。^(id view, UIScreenEdgePanGestureRecognizer *recognizer) { }]; }];

添加事件即可。

注意事项:屏幕边缘滑动事件,要求UIView的坐标靠边屏幕边缘,否则是触发不了事件的。

屏蔽边缘侧滑事件只有左和右。上与下是手机系统事件,不能占用。

7、定时事件

当一个UI需要定时更新显示内容时,定时事件可以让你轻松完成功能代码:

事件定义:

//!定时器事件。typedef void(^OnTimer)(id view,NSTimer *timer, NSInteger count);#pragma mark 定时器事件//!绑定事件 用代码块的形式-(UIView*)onTimer:(OnTimer)block;-(UIView*)onTimer:(OnTimer)block interval:(double)sencond;//!移除绑定事件

使用示例:

@"HH:mm"] font:15*STStandardScale color:color] toCenter] onTimer:^(UILabel* view,NSTimer *timer, NSInteger count) { //时间 [view text:[NSDate.beiJinDate toString:@"HH:mm"]]; //电池 CGFloat batteryLevel = [UIDevice currentDevice].batteryLevel; [battery text:STString(@"%.f%%",batteryLevel*100)]; //wifi Reachability *reach=[Reachability reachabilityWithHostName:@"baidu.com"]; NetworkStatus status= reach.currentReachabilityStatus; if(status==ReachableViaWiFi) { [wifi text:@"Wi-Fi"]; } else { [wifi text:@"No Wifi"]; } } interval:60];

其它事件:

其它事件是指某些UI特有的,例如:

UILabel 的LongPressCopy 长按保存事件。

UIImage的LongPressSave 长按保存事件。

UISwitch的onSwitch 切换事件。

等。。。特殊一点的会单独开篇介绍。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:ASP.NET Aries 高级开发教程:如何写WebAPI接口
下一篇:Java中利用Alibaba开源技术EasyExcel来操作Excel表的示例代码
相关文章

 发表评论

暂时没有评论,来抢沙发吧~