前言:
前面介紹一些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 事件:拖動
定義:
typedef void(^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*)removeDrag;
示例用法:
[sagit onDrag:^(UIView* view, UIPanGestureRecognizer *recognizer) { CGPoint point = [recognizer translationInView:view]; [Sagit.MsgBox prompt:STNumString(point.x)]; }];
通過recognizer可以獲取滑動的坐標、起始狀態和結束狀態,
被拖動的UI元素會跟著手勢一起動,
其它用法和上面的一致,
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; //!移除系結事件 -(UIView*)removeSlide;
示例用法:
[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 切換事件,
等,,,特殊一點的會單獨開篇介紹,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/40080.html
標籤:iOS
上一篇:Sagit.Framework For IOS 自動布局教程:5、狀態欄 :高度、樣式前景色控制、狀態欄UIView控制、隱藏控制
