簡體   English   中英

僅在視圖的一部分上接收輕擊手勢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM