UITapGestureRecognizer 点击半径
Posted
技术标签:
【中文标题】UITapGestureRecognizer 点击半径【英文标题】:UITapGestureRecognizer tap radius 【发布时间】:2013-11-20 04:15:01 【问题描述】:我有一个在屏幕上移动的UIImageView
,我在图像中添加了一个UITapGestureRecognizer
。这一切都很好而且很漂亮,但是,当图像开始在屏幕上移动得太快时,就会变得更难点击和被识别。
如果你看一下这张图片,你会看到一个围绕着 2 个简笔画的绿色方块。
假设,例如,您必须触摸绿色方块内部才能将其注册为“点击”。目前它就像顶部图像,但我想在底部图像中有一些额外的填充。那么如何让UITapGestureRecognizer
的区域更大呢?
【问题讨论】:
见***.com/questions/15553810/… 这似乎只是改变了我的图像的大小。我想保持实际图像大小不变,但有更大的点击半径。 代码无法改变视图的大小。它只会在检测到触摸事件的地方发生变化。 感谢各位的帮助。不过我想通了。 【参考方案1】:不要将点击手势识别器添加到图像视图中,而是将其添加到图像视图的超级视图中。遍历子视图以找到应该接收点击手势的视图。例如:
- (void)viewDidLoad
[super viewDidLoad];
UIView *containerView = [self view];
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];
[containerView addGestureRecognizer:tapRecognizer];
- (void)tap:(UITapGestureRecognizer *)sender
UIView *containerView = [sender view];
CGPoint location = [sender locationInView:containerView];
for (UIView *subview in [[containerView subviews] reverseObjectEnumerator])
if (![subview isKindOfClass:[UIImageView class]])
continue;
if (CGRectContainsPoint([subview frame], location))
[self imageViewTapped:(UIImageView *)subview];
return;
- (void)imageViewTapped:(UIImageView *)imageView
// do something when an image view is tapped
【讨论】:
这无济于事,除非您还扩展框架的可点击区域,可能使用CGRectInset(subview.frame, someNegativeFloat, someNegativeFloat)
。以上是关于UITapGestureRecognizer 点击半径的主要内容,如果未能解决你的问题,请参考以下文章
UIScrollView 滚动时,UITapGestureRecognizer 不点击
当我第一次快速点击按钮时,按钮点击不适用于 UITapGestureRecognizer
如何防止点击子视图触发父视图上的 UITapGestureRecognizer?