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 点击半径的主要内容,如果未能解决你的问题,请参考以下文章

UITapGestureRecognizer 点击半径

UIScrollView 滚动时,UITapGestureRecognizer 不点击

当我第一次快速点击按钮时,按钮点击不适用于 UITapGestureRecognizer

如何防止点击子视图触发父视图上的 UITapGestureRecognizer?

UITapGestureRecognizer 莫名其妙地停止识别点击手势

使 UITapGestureRecognizer 不消耗与视图无关的点击