iOS交互性

视图:cell交互性


一、当一个控件不能接收时间时一般有以下几种情况

  • 1.不接收用户交互
    userInteractionEnabled = NO
  • 2.当一个控件隐藏时
    Hidden = YES
  • 3.当一个控件为透明白时
    注意:UIImageView,以及它的子控件默认是不能接收触摸事件的

二、事件的响应

用户点击屏幕产生的一个触摸事件,经过一系列的传递过程后,会找到一个最适合的视图来处理事件.找到最合适的视图控件后,就会调用控件的touches方法来作具体的时间处理.touches的默认做法是将事件顺着响应者链条向上传递,将事件交给上一个响应者处理。

三、系统是如何寻找最合适的View

  • 1.先判断自己是否能接收触摸事件
  • 2.再判断触摸的当前点在不在自己身上
  • 3.如果在自己身上,它会从后往前遍历子控件,遍历出每一个控件后,重启前两步
  • 4.如果没有符合条件的子控件,那么自身就是最合适的View
在寻找最合适View的过程中,系统会调用一以下2个方法:
//作用:寻找最适合的View
//什么时候调用:当事件传递给当前View时就会调用这个方法
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
    UIView *fitView = [super hitTest:point withEvent:event];
    NSLog(@"%@",fitView);
    return fitView;
}
//作用:判断触摸点在不在当前的View上.
//什么时候调用:在hitTest方法当中会自动调用这个方法.
//注意:point必须得要跟当前View同一个坐标系.
-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{
    return YES;
}

四、举个例子

如上图cell交互性图片所示,当点击cell展开的时候关闭交互性,cell关闭的时候开启交互性。

if (spokenList.isExpand) {
    self.playProgress.hidden = NO;
    self.userInteractionEnabled = NO;
}else{
    self.playProgress.hidden = YES;
    self.userInteractionEnabled = YES;
    }

当想要点击cell上的3个按钮响应时间的话,代码如下:

//父视图不可交互  父视图上的子视图可交互
//作用:寻找最适合的View
//什么时候调用:当事件传递给当前View时就会调用这个方法
//当触摸点在按钮上的时候,才让按钮去响应事件.
//把当前点转换成按钮坐标系上的点.
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
    CGPoint btnA =  [self convertPoint:point toView:self.singlePrimaryPlay];
    CGPoint btnB =  [self convertPoint:point toView:self.singleRecording];
    CGPoint btnC =  [self convertPoint:point toView:self.singlePlayBack];
    if ( [self.singlePrimaryPlay pointInside:btnA withEvent:event]) {
        return self.singlePrimaryPlay;
    }else if ([self.singleRecording pointInside:btnB withEvent:event]){
        return self.singleRecording;
    }else if ([self.singlePlayBack pointInside:btnC withEvent:event]){
        return self.singlePlayBack;
    }else{
        return [super hitTest:point withEvent:event];
    }
}

谢谢支持!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在iOS开发中经常会涉及到触摸事件。本想自己总结一下,但是遇到了这篇文章,感觉总结的已经很到位,特此转载。作者:L...
    WQ_UESTC阅读 6,251评论 4 26
  • 本文主要讲解iOS触摸事件的一系列机制,涉及的问题大致包括: 触摸事件由触屏生成后如何传递到当前应用? 应用接收触...
    baihualinxin阅读 1,285评论 0 9
  • 前言: 按照时间顺序,事件的生命周期是这样的: 事件的产生和传递(事件如何从父控件传递到子控件并寻找到最合适的vi...
    reviewThis阅读 815评论 1 2
  • 前言 按照时间顺序,事件的生命周期是这样的: 事件的产生和传递(事件如何从父控件传递到子控件并寻找到最合适的vie...
    欢博阅读 658评论 0 3
  • 近日,苏宁易购第一家综合性汽车超市在南京开业,这是在7月1日新版《汽车销售管理办法》(以下简称“新办法”)正式实施...
    雨儿下了阅读 325评论 0 0

友情链接更多精彩内容