【问题标题】:iOS - Tap specific area in UIImageView and perform the actioniOS - 点击 UIImageView 中的特定区域并执行操作
【发布时间】:2015-07-25 15:24:17
【问题描述】:

我有一个平面图的UIImageView,客户想要做的是当他点击平面图中的特定区域时,它将显示该区域的内部图像......我没有问题单击时显示该区域。我的问题是要单击的区域本身。看看我最初的实现:(不知道是不是正确的方法)

主浴室区有一个多余的地方,我在里面放了一个按钮,所以当用户点击该区域时,我将执行显示内部图像的操作......在“步入式衣橱”区域也是如此,我有 2 个按钮。

那么,有没有办法优化这个实现?

【问题讨论】:

  • 我认为您已经实施了正确的解决方案。没有优化的方法来解决这种情况。您可以使用 tapGestureRecognizer 而不是按钮,但在这种情况下,您必须创建那么多识别器。

标签: ios objective-c cocoa-touch uiimageview uitapgesturerecognizer


【解决方案1】:

一个选项是使用 UITapGestureRecognizer 到 imageView,然后当手势被触发时

- (IBAction)tap:(UITapGestureRecognizer*)sender {
    CGPoint touchPoint = [sender locationInView:yourimageview];  
   //Then decide the point in which area to do different action
}

【讨论】:

    【解决方案2】:

    你说

    单击时显示该区域没有问题。

    了解如何显示该区域非常重要,因为这可能是解决问题的关键。

    如果您有一些路径(CGPath、UIBezierPath)来确定要突出显示的区域,则可以使用相同的路径进行命中测试。在按钮子类、UIView 子类或手势识别器中。

    即此代码使用图层的遮罩路径(如果存在)。当然,这可能是多条路径。

    @implementation MyView
    //
    // ...
    //
    - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
    {
        CGPoint p = [self convertPoint:point toView:[self superview]];
        if(self.layer.mask){
            if (CGPathContainsPoint([(CAShapeLayer *)self.layer.mask path], NULL, p, YES) )
                return YES;
        }else {
            if(CGRectContainsPoint(self.layer.frame, p))
                return YES;
        }
        return NO;
    }
    
    @end
    

    只有在此路径内时,点击手势识别器才会检测到视图上的点击。

    相同的pointInside:withEvent: 将适用于基于路径的 UIButton 子类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-05
      • 1970-01-01
      • 2019-11-21
      • 1970-01-01
      • 2021-08-24
      • 2018-05-16
      • 2012-10-25
      相关资源
      最近更新 更多