UITouch

  • 触摸事件基本都是发生在 viewController 中,首先触摸的对象是视图,而视图的类 UIView 继承了 UIRespnder 类,但是要对事件作出处理,还需要重写 UIResponder 类中定义的事件处理函数。根据不同的触摸状态,程序会调用相应的处理函数。

1、touch 的创建

// 获取任意一个触摸对象
UITouch *touch = [touches anyObject];

// 获取任意一个触摸对象
UITouch *touch = [[event allTouches] anyObject];

// 获取指定的 view 触摸对象
UITouch *touch = [[event touchesForView:myView] anyObject];

// 获取指定的 window 触摸对象
UITouch *touch = [[event touchesForWindow:self.view.window] anyObject];

2、touch 的设置

  • 在系统触摸事件处理方法中实现
// 设置接收多点触摸
/*
默认为 NO,即视图默认不接收多点触摸
*/
self.view.multipleTouchEnabled = YES;

3、touch 的获取

  • 在系统触摸事件处理方法中实现
// 获取触摸窗口
UIWindow *touchWindow = touch.window;

// 获取触摸视图
UIView *touchView = touch.view;

// 获取触摸手势
NSArray *touchGesture = touch.gestureRecognizers;

// 获取触摸次数
NSUInteger tapCount = touch.tapCount;

// 获取触摸时间
NSTimeInterval timestamp = touch.timestamp;

// 获取触摸状态
/*
UITouchPhaseBegan,         // whenever a finger touches the surface.     触摸开始
UITouchPhaseMoved,         // whenever a finger moves on the surface.    接触点移动
UITouchPhaseStationary,    // whenever a finger is touching the surface but hasn't moved 
// since the previous event.                  接触点无移动
UITouchPhaseEnded,         // whenever a finger leaves the surface.      触摸结束
UITouchPhaseCancelled,     // whenever a touch doesn't end but we need to stop tracking 
// (e.g. putting device to face)              触摸取消
*/
UITouchPhase touchPhase = touch.phase;

// 获取触摸位置

// 上次触摸点的位置
CGPoint lastPoint = [touch previousLocationInView:self.view];

// 当前触摸点的位置
CGPoint currentPoint = [touch locationInView:self.view];

// 获取触摸半径
CGFloat majorRadius = touch.majorRadius;
CGFloat majorRadiusTolerance = touch.majorRadiusTolerance;

4、系统触摸事件处理方法

  • 不用手动调用
// 触摸开始,重写 UIResponder 中定义的方法
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

}

// 触摸移动,重写 UIResponder 中定义的方法
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

}

// 触摸结束,重写 UIResponder 中定义的方法
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

}

// 触摸取消,重写 UIResponder 中定义的方法
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {

}

5、视图随触摸移动

// 触摸移动
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

    // 获取触摸对象
    UITouch *touch = [touches anyObject];
    UIView *tapView = touch.view;

    // 获取触摸点位置
    CGPoint lastPoint = [touch previousLocationInView:self.view];
    CGPoint currentPoint = [touch locationInView:self.view];

    // 改变视图中心坐标
    CGPoint tapViewCenter = tapView.center;

    tapViewCenter.x += currentPoint.x - lastPoint.x;
    tapViewCenter.y += currentPoint.y - lastPoint.y;

    tapView.center = tapViewCenter;
}

6、单击/双击触摸

// 触摸结束
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

    UITouch *touch = [touches anyObject];

    // 单击
    if (touch.tapCount == 1) {

        // 响应单击触摸事件
        [self performSelector:@selector(singleTapClick) withObject:nil afterDelay:0];
    }
    // 双击
    else if (touch.tapCount == 2) {

        // 取消单击触摸响应事件
        [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(singleTapClick) object:nil];

        // 响应双击触摸事件
        [self performSelector:@selector(doubleTapClick) withObject:nil afterDelay:0];
    }
}

// 单击触摸响应事件处理
- (void)singleTapClick {

    self.view.backgroundColor = [UIColor greenColor];
}

// 双击触摸响应事件处理
- (void)doubleTapClick {

    self.view.backgroundColor = [UIColor orangeColor];
}

转载于:https://www.cnblogs.com/CH520/p/9413505.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值