【问题标题】:UITapGestureRecognizer tap radiusUITapGestureRecognizer 点击半径
【发布时间】:2013-11-20 04:15:01
【问题描述】:

我有一个在屏幕上移动的UIImageView,我在图像中添加了一个UITapGestureRecognizer。这一切都很好而且很漂亮,但是,当图像开始在屏幕上移动得太快时,就会变得更难点击和被识别。

如果你看一下这张图片,你会看到一个围绕着 2 个简笔画的绿色方块。

假设,例如,您必须触摸绿色方块内部才能将其注册为“点击”。目前它就像顶部图像,但我想在底部图像中有一些额外的填充。那么如何让UITapGestureRecognizer的区域更大呢?

【问题讨论】:

  • 这似乎只是改变了我的图像的大小。我想保持实际图像大小不变,但有更大的点击半径。
  • 代码无法改变视图的大小。它只会在检测到触摸事件的地方发生变化。
  • 感谢各位的帮助。不过我想通了。

标签: objective-c uiimageview uitapgesturerecognizer


【解决方案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)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-08
  • 2012-08-11
  • 1970-01-01
相关资源
最近更新 更多