我在视图控制器中有一个UIImageView
。是否可以使图像视图的某些区域可以进行处理?
示例:我有一张地图图片。只允许POI可点击。不是整个形象。这可能吗?
答案 0 :(得分:14)
您可以使用 handleGesture 方法。首先,您需要创建一个接收触摸的位置,您必须将其与委托方法中的触摸位置进行比较,如下所示:
CGRect locationRect;
在viewdidload中
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");
}
}
答案 1 :(得分:2)
是的,这是可能的,但你应该问问自己是否值得。如果是我,我会在地图上添加一个兴趣点对象,并将手势识别器附加到那个。但是,如果您想转到其他路线,可以查看UIGestureRecognizerDelegate
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
这将说明手势是否应该处理给定的触摸。您可以根据您的POI过滤它。
答案 2 :(得分:1)
感谢manujmv,我能够找出自定义手势区的 Swift 3 实现。在我的情况下,我在窗口的每一侧创建50个点条带,以便从一个VC移动到另一个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)
}
答案 3 :(得分:0)
当我接触到第一视图时,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);
**因此,如果您想要拍摄,只需要对您的视图进行识别,减少您的框架的高度**