iOS - 点击UIImageView中的特定区域并执行操作

时间:2015-05-14 05:44:21

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

我有一个UIImageView的平面图,客户想要做的是当他点击平面图中的特定区域时,它会显示该区域的内部图像...我不会'单击时显示该区域时出现问题。我的问题是要点击的区域。看看我的初步实施:(我不知道它是否是正确的方式)

enter image description here

主沐浴区有一个多余的地方我放了一个按钮,所以当用户点击该区域时,我将执行显示内部图像的动作...同样也在"走路-in closet"区域,我有2个按钮。

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

2 个答案:

答案 0 :(得分:0)

一个选项是使用UITapGestureRecognizer来进行imageView,然后触发手势

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

答案 1 :(得分:0)

你说

  

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

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

如果你有一些路径(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子类。