iOS交互性

视图:cell交互性


iOS交互性_第1张图片

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

  • 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];
    }
}

谢谢支持!

你可能感兴趣的:(iOS交互性)