防止从 UIImageView 到 superview 的触摸传输

Posted

技术标签:

【中文标题】防止从 UIImageView 到 superview 的触摸传输【英文标题】:Prevent touch transfer to superview from UIImageView 【发布时间】:2020-03-06 12:32:17 【问题描述】:

我有一个自定义垂直范围滑块,并使用 touchBegan、touchMoved 和 touchEnded 处理头部的移动。当我尝试滑动头部时,它会滑动一点,然后取消触摸并在 ios 13 上开始交互式关闭过渡。我想防止触摸在滑动时转移到超级视图。我们如何才能做到这一点。

提前致谢。

【问题讨论】:

【参考方案1】:

尝试将另一个手势识别器用于另一个选择器的视图

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tappedOnBubble)];
    [self.bubbleView addGestureRecognizer:tap];

UITapGestureRecognizer *tap2 = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tappedOnMainView)];
   [self.view addGestureRecognizer:tap2];


-(void)tappedOnMainView

    NSLog(@"touched on main View");
    [self.vwToShow setHidden:NO];

-(void)tappedOnView

    NSLog(@"tapped on slider");
    [self.vwToShow setHidden:YES];

UIView 继承自 UIResponder,基本的触摸事件由触发触摸开始事件的视图检测。您在主视图中添加的子视图也响应 touches started 方法。这是非常基本的。您还添加了一个带有点击手势识别器的选择器方法。

如果你仍然想使用 touchBegan ,我认为你应该这样做:

- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event 

    if(theTouchLocation is inside your bubble)
    
        do something with the touch
    
    else
    
        //send the touch to the next view in the hierarchy ( your large view )
       [super touchesBegan:touches withEvent:event];
       [[self nextResponder] touchesBegan:touches withEvent:event];
    

【讨论】:

以上是关于防止从 UIImageView 到 superview 的触摸传输的主要内容,如果未能解决你的问题,请参考以下文章

防止 UITableViewCell 的 UIImageView 调整异步加载的 UIImage 的大小

防止 CAGradientLayer 在 UITableViewCell 上的 UIImageView 内重叠

如何防止 UIImageView 使用 Autolayout 调整大小

UIImageView 显示图像时如何防止 UIToolbar 调整大小?

在整个屏幕上触摸拖动视图

从 UIImageView 传递触摸到 superview