[英]Receive tap gestures only on part of a view
我在視圖控制器中有一個UIImageView
。 是否可以使圖像視圖的某些區域可以進行處理?
示例:我有一張地圖圖片。 只允許POI可點擊。 不是整個形象。 這可能嗎?
您可以使用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");
}
}
是的,這是可能的,但你應該問自己是否值得。 如果是我,我會在地圖上添加一個興趣點對象,然后將手勢識別器附加到其上 。 但是,如果您想轉到其他路線,可以查看以下UIGestureRecognizerDelegate
方法
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
這將說明手勢是否應該處理給定的觸摸。 您可以根據您的POI過濾它。
感謝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)
}
是的,我可以幫助你。 最近我試圖創建一個自定義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);
**因此,如果您想要進行拍攝,只需要對您的視圖進行識別,即可降低您的框架的高度**
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.