前言:前面介绍一些UI的基本用法,这节介绍一下UIView的通用事件。 通用事件在所有的UI上都可以使用。 1、UIView 事件:点击定义: //可以附加的点击事件 (存档在keyvalue中时,无法传参(内存地址失效),只能针对性存runtime的属性) typedef void(^OnViewClick)(id view); #pragma mark 扩展系统事件 - 点击 //!点击事件的间隔(单位秒s) -(NSInteger)clickInterval; //!设置点击事件的间隔(单位秒s) -(UIView*)clickInterval:(NSInteger)sencond; //!执行点击事件 -(UIView*)click; //!绑定事件 event:指定事件名称,也可以是控制器名称,也可以指向其它UI的事件,如:Age.click (Age是其它UI的name) -(UIView*)addClick:(NSString*)event; //!绑定事件 并指定target -(UIView*)addClick:(NSString *)event target:(UIViewController*)target; //!绑定事件 用代码块的形式 -(UIView*)onClick:(OnViewClick)block; //!移除绑定点击事件 -(UIView*)removeClick; 示例用法1:直接事件 //添加UI并增加点击事件、事件中再触发另一个UI的点击 [[[[cView addUIView:@"level4"] width:154 height:154] relate:LeftTop v:435 v2:538] onClick:^(UIView* view) { [winView click]; }]; 示例用法2:触发方法 [[STLastImageView image:@"btn_sign"] addClick:@"sign:"]; //签到 -(void)sign:(UIButton*)btn { 。。。。。。。 } 示例用法3:跳转控制器。 示例用法4:设置允许点击间隔(2秒) [[[STLastButton titleColor:ColorWhite] backgroundImage:@"btn_full_middle"] clickInterval:2]; 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; //!移除绑定双击事件 -(UIView*)removeDbClick; 用法和单击一致。 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; //!移除绑定长按事件 -(UIView*)removeLongPress; 示例用法:
用法和点击基本一致。 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; 示例用法: [sagit onDrag:^BOOL(UIView* view, UIPanGestureRecognizer *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 则不会一起动。 其它用法和上面的一致。 5、UIView 事件:滑动定义: typedef void(^OnViewSlide)(id view,UISwipeGestureRecognizer *recognizer); 示例用法: [sagit onSlide:^(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; //!移除绑定事件 -(UIView*)removeScreenRightEdgeSlide; 使用示例: [[[[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];//回归原位。 } }]; [view onScreenRightEdgeSlide:^(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; //!移除绑定事件 -(UIView*)removeTimer; 使用示例: [[[status addLabel:nil text:[NSDate.beiJinDate toString:@"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:@"www.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 切换事件。 等。。。特殊一点的会单独开篇介绍。
|
|