iOS TouchEvent实战

25 篇文章 0 订阅

从手指接触屏幕,到app控件作出响应,就是一个完整的TouchEvent发生了。

通过控制TouchEvent流程,可以实现哪些基础需求:

  1. 增大控件响应范围;
  2. 阻断UIScrollView对事件的截取;

来看下整个过程:手指触摸->产生TouchEvent->发送给UIApplication寻找响应者响应。这里其实通过hitTest:WithEvent从下往上(从window到顶级视图)寻找一个在手指点击范围内并且可以响应事件的响应者;是否在点击范围根据pointInside来判断,所以如果你想要增大控件响应范围,可以重写这个方法。例如:

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
    if (CGRectContainsPoint(CGRectMake(-10, -10, self.bounds.size.width + 20, self.bounds.size.height + 20), point)) {
        return YES;
    }
    return NO;
}

上面这个就可以增加控件的响应范围,上下左右都延伸了10。

寻找最佳响应者方法:hitTest:withEvent:如果需要在UIScrollView子视图实现自定义touchBegin手势,那么需要在这个方法里做判断。当点击的视图是需要处理自定义的视图时,通知父视图即UIScrollView禁止滑动,否则自定义手势不执行;例如:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
    UIView *view = [super hitTest:point withEvent:event];
    
    if ([view isKindOfClass:[UIImageView class]]) {
        if (self.virtualStickViewTouchImageView) {
            //这里回调禁用滑动
            self.virtualStickViewTouchImageView(YES);
        }
    }
    
    return view;
}

未完待续。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值