防止从 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 调整大小