美文网首页iOS进阶指南iOS学习笔记iOS Developer
(GeekBand)iOS实战进阶开发第一周

(GeekBand)iOS实战进阶开发第一周

作者: ad951f2b2664 | 来源:发表于2016-09-10 02:57 被阅读114次

    Events

    iOS开发中 分别对应三种Events 1.触摸事件(例如用户点击、捏合图片等) 2.运动事件(例如用户摇晃设备) 3.远程控制事件(例如用户通过耳机控制音量)

    在iOS中并不是所有的类都能处理接收并事件,只有继承自UIResponder类的对象才能处理事件(如UIView、UIViewController、UIApplication)

    1.触摸事件相对应的几种方法

    //一根或多根手指开始触摸屏幕时执行;
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
    //一根或多根手指在屏幕上移动时执行,此方法在移动过程中会重复调用;  
    - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;   
    //一根或多根手指触摸结束离开屏幕时执行;
    - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
    //触摸意外取消时执行(例如正在触摸时打入电话);   
    - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;   
    

    在StoryBorad中设置支持多点触控

    设置多点触控.png

    勾选Multiple Touch即可

    2.运动事件相对应的几种方法

    //运动开始时执行
    - (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event NS_AVAILABLE_IOS(3_0);
    //运动结束后执行   
    - (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event NS_AVAILABLE_IOS(3_0);
    //运动被意外取消时执行
    - (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event NS_AVAILABLE_IOS(3_0);
    

    3.远程控制事件对应一种方法

    //接收到远程控制消息时执行
    -(void)remoteControlReceivedWithEvent:(UIEvent *)event NS_AVAILABLE_IOS(4_0);
    

    2.事件分发过程


    事件分发过程.png

    左侧为较为简单的传递过程 一次逐级递减
    右侧为常见事件传递过程 会在层级中进行判断

    3.无法响应事件的原因

    .userInteractionEnabled=NO
    .hidden=YES
    .alpha=0~0.01
    //没有实现开始触摸方法(touchesBegan:withEvent:)
    

    手势识别

    手势的概念:按照一定的特殊规律出现的一系列触摸事件

    1.iOS定义了六种手势操作

    UITapGestureRecognizer  //点按手势
    UIPinchGestureRecognizer    //捏合手势
    UIPanGestureRecognizer  //拖动手势
    UISwipeGestureRecognizer    //轻扫手势,支持四个方向的轻扫,但是不同的方向要分别定义轻扫手势
    UIRotationGestureRecognizer //旋转手势
    UILongPressGestureRecognizer     //长按手势
    

    所有的手势均为UIGestureRecognizer的子类

    手势实现原理:
    1.收集UITouch
    2.判断是否符合规律
    -若符合规律则触发手势
    -若不符合规律则判断为一般触摸事件
    例如:double tap

    2.连续以及离散手势
    iOS定义的六种手势中 五中为连续手势 只有一种(UITapGestureRecgnier)为离散手势 其特征是:一旦识别无法取消 而且只会调用一次手势操作事件 而连续手势则是可以取消手势并且会多次调用手势操作事件

    3.使用手势
    使用步骤:
    1.创建对应的手势对象
    2.设置手势识别属性【可选】
    3.附加手势到指定的对象
    4.编写手势操作方法

    -通过代码添加手势

    #pragma mark: ---add gesture---
     UIRotationGestureRecognizer *rotationGesture=[[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotateImage:)];
        [self.view addGestureRecognizer:rotationGesture];
    }
    
    
    #pragma mark:   --- set gestureRecognizer---
    
    -(void)rotateImage:(UIRotationGestureRecognizer *)gesture{
        //NSLog(@"rotate:%i",gesture.state);
        if (gesture.state==UIGestureRecognizerStateChanged) {
            //
            self.myScrollView.transform=CGAffineTransformMakeRotation(gesture.rotation);
        }else if(gesture.state==UIGestureRecognizerStateEnded){
            [UIView animateWithDuration:0.8 animations:^{
                self.myScrollView.transform=CGAffineTransformIdentity;
            }];
        }
    }
    

    -通过StroyBorad添加手势

    1.将需要的手势拖进对应的View中


    通过StoryBorad添加手势.png

    2.打开Assistant editor 在对应的.m文件中进行拖线 添加事件 即可完成

    拖线.png

    3.检查是否支持User Interaction Enabled 若没有勾选该选项 则需要手动勾选


    检查支持.png

    是否支持多个手势
    注:需要在.h文件中遵守UIGestureRecognizer协议

    -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
        
        return YES;
    }
    

    ScrollView

    ScrollView提供了View所不具备的滑动功能 以便实现更复杂的效果
    1.设置ScrollView的大小(滑动范围)
    由于ScrollView常见会配合PageControl使用 因此宽度可以直接乘上pageControl的总页数

    self.myScrollView.contentSize =CGSizeMake(self.view.frame.size.width * pageNum,self.view.frame.size.height);
    

    2.ScrollView几种特殊显示效果(也可以在StoryBoard中设置)

    
        self.myScrollView.bounces = NO; //回弹效果
        self.myScrollView.showsHorizontalScrollIndicator = NO; //宽度指示条
        self.myScrollView.showsVerticalScrollIndicator = NO; //高度指示条
    

    3.ScrollView起始位置(contentOffset)

    self.myScrollView.contentOffset = CGPointMake(0, 0);)
    

    4.ScrollView协议方法

    ScrollView协议.png

    5.ScrollView自带pinch方法

    pinch.png

    在自己写代码的过程中会发现 pinch以后无法进行左右滑动(原因是contentSize变化了) 目前找到的方法是在原有的ScrollView上再添加一层一样的ScrollView 背景色为透明色 原有的ScrollView控制滑动 新加的ScrollView控制Pinch 或者重构zoomingInScrollView方法

    相关文章

      网友评论

        本文标题:(GeekBand)iOS实战进阶开发第一周

        本文链接:https://www.haomeiwen.com/subject/ukdyettx.html