前言:

前面介绍一些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];

新增:扩大点击范围功能:2021-10-27

//!绑定事件 event:指定事件名称,也可以是控制器名称,也可以指向其它UI的事件,如:Age.click (Age是其它UI的name)
-(UIView*)addClick:(NSString*)event;
//!绑定事件 event:指定事件名称,也可以是控制器名称,也可以指向其它UI的事件,如:Age.click (Age是其它UI的name) enlarge: 扩大点击范围(上下左右)大小。
-(UIView*)addClick:(NSString*)event enlarge:(CGFloat)value;
-(UIView*)addClick:(NSString*)event enlarge:(CGFloat)left top:(CGFloat)top right:(CGFloat)right bottom:(CGFloat)bottom;
//!绑定事件 并指定target
-(UIView*)addClick:(NSString *)event target:(UIViewController*)target;
-(UIView*)addClick:(NSString *)event target:(UIViewController*)target enlarge:(CGFloat)value;
-(UIView*)addClick:(NSString *)event target:(UIViewController*)target enlarge:(CGFloat)left top:(CGFloat)top right:(CGFloat)right bottom:(CGFloat)bottom;
//!绑定事件 用代码块的形式
-(UIView*)onClick:(OnViewClick)block;
//!绑定事件 用代码块的形式 enlarge: 扩大点击范围(上下左右)大小。
-(UIView*)onClick:(OnViewClick)block enlarge:(CGFloat)value;
-(UIView*)onClick:(OnViewClick)block enlarge:(CGFloat)left top:(CGFloat)top right:(CGFloat)right bottom:(CGFloat)bottom; 

使用示例:

    [[[[sagit addUIView:@"abc"] backgroundColor:ColorBlack] x:200 y:400 width:100 height:100] block:^(UIView* view) {
        [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;
//!移除绑定双击事件
-(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;

-(UIView *)onDrag:(OnViewDrag)block direction:(DragDirection)direction
//!移除绑定拖动事件 -(UIView*)removeDrag;

示例用法:

    [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 则不会一起动。

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; //!移除绑定事件 -(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 切换事件。

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

 

posted on 2020-08-15 15:20  路过秋天  阅读(556)  评论(0编辑  收藏  举报
路过秋天