11

我有UIImageView一个视图控制器。是否可以使图像视图的某些区域可点击?

示例:我有一张地图的图像。仅使 POI 可点击。不是整个图像。这可能吗?

4

4 回答 4

18

您可以使用handleGesture方法。首先,您需要创建一个位置来接收触摸,并且必须将其与委托方法中的触摸位置进行比较,如下所示:

CGRect locationRect;

在视图didload

locationRect = CGRectMake(CREATE A FRAME HERE);

接下来是委托方法

- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer {
    CGPoint p = [gestureRecognizer locationInView:self.view];
    if (CGRectContainsPoint(locationRect, p)) {
        NSLog(@"it's inside");
    } else {
        NSLog(@"it's outside");
    }
}
于 2013-06-26T04:24:04.343 回答
3

感谢 manujmv,我能够弄清楚自定义手势区域的Swift 3实现。在我的例子中,我在窗口的每一侧创建了 50 个点条,以便从一个 VC 移动到另一个。但是应该很容易将它重用于任何其他应用程序:

class ViewController: UIViewController {
   ...
   var mySensitiveArea: CGRect?
   ...
   override func viewDidLoad() {
   ...
   let screenWidth = UIScreen.main.bounds.size.width
   let screenHeight = UIScreen.main.bounds.size.height
   mySensitiveArea = CGRect(0, 0, 50, screenHeight)
   let swipeGesture = UISwipeGestureRecognizer(target: self, action: #selector(self.handleGesture(_:)))
   swipeGesture.direction = UISwipeGestureRecognizerDirection.right
   self.view.addGestureRecognizer(swipeGesture)
   }
}

//Function for determining when swipe gesture is in/outside of touchable area
func handleGesture(_ gestureRecognizer: UIGestureRecognizer) {
    let p = gestureRecognizer.location(in: self.view)
    if mySensitiveArea!.contains(p) {
        print("it's inside")
        showMainViewController()
    }
    else {
        print("it's outside")
    }
}

//Segue to Main VC
func showMainViewController() {
    self.performSegue(withIdentifier: "toMain", sender: self)
}
于 2016-12-05T04:48:02.210 回答
2

是的,这是可能的,但你应该问问自己这是否值得。如果是我,我会在地图上添加一个兴趣点对象,并在上面附加一个手势识别。但是,如果您想走另一条路线,可以查看以下方法UIGestureRecognizerDelegate

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

这将说明手势是否应该处理给定的触摸。您可以根据您的兴趣点对其进行过滤。

于 2013-06-26T04:16:37.663 回答
0

是的,我可以帮助你。最近,我尝试创建一个自定义的 segmentedControl,其中包含三个视图。

当我触摸视图的前半部分时,tapGesture 起作用了。但剩下的一半没有反应。我检查了它,结果现在对你有用。

我的片段框架是:

segment.frame=CGRectMake(0, 0, 300, 100) ;

UIView 的框架是:

view1 = [[UIView alloc]initWithFrame:CGRectMake(10, 80, 100, 40)];

然后我将框架的高度更改为 200 然后它起作用了:

segment.frame=CGRectMake(0, 0, 300, 200) ;

** 因此,如果您想制作,只需点击识别您的部分视图,就可以降低框架的高度 **

于 2013-10-24T14:05:15.097 回答