我有UIImageView
一个视图控制器。是否可以使图像视图的某些区域可点击?
示例:我有一张地图的图像。仅使 POI 可点击。不是整个图像。这可能吗?
我有UIImageView
一个视图控制器。是否可以使图像视图的某些区域可点击?
示例:我有一张地图的图像。仅使 POI 可点击。不是整个图像。这可能吗?
您可以使用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");
}
}
感谢 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)
}
是的,这是可能的,但你应该问问自己这是否值得。如果是我,我会在地图上添加一个兴趣点对象,并在上面附加一个手势识别器。但是,如果您想走另一条路线,可以查看以下方法UIGestureRecognizerDelegate
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
这将说明手势是否应该处理给定的触摸。您可以根据您的兴趣点对其进行过滤。
是的,我可以帮助你。最近,我尝试创建一个自定义的 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) ;
** 因此,如果您想制作,只需点击识别您的部分视图,就可以降低框架的高度 **