2016-11-10 30 views
0

我在該圖像上有一個imageview和一個文本框。我使用下面的代碼使textfield可拖動,但它可以拖動到屏幕中的任何位置。我希望textfield只能在imageview的限制內拖動。如果我取消註釋,如果檢查draagedView函數,textfield卡在圖像視圖的左側,因爲它們的x值相同。將限制設置爲Swift中的可拖動項目

我發現這個解決方案,但不能修改它在我的項目上工作。 Use UIPanGestureRecognizer to drag UIView inside limited area

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    let gesture = UIPanGestureRecognizer(target: self, action: #selector(ViewController.draggedView(_:))) 
    bottomTextField.addGestureRecognizer(gesture) 
    bottomTextField.isUserInteractionEnabled = true 
} 
    func userDragged(gesture: UIPanGestureRecognizer){ 
    let loc = gesture.location(in: self.view) 
    self.bottomTextField.center = loc 
} 
func draggedView(_ sender:UIPanGestureRecognizer) { 
    let compare = MyimageView.frame.maxX <= bottomTextField.frame.maxX 
    //if(MyimageView.frame.minX <= bottomTextField.frame.minX && compare) 
    // { 
    self.view.bringSubview(toFront: sender.view!) 
    let translation = sender.translation(in: self.view) 
    sender.view!.center = CGPoint(x: sender.view!.center.x + translation.x, y: sender.view!.center.y + translation.y) 
    sender.setTranslation(CGPoint.zero, in: self.view) 

    // } 
} 

回答

0

的主要問題是,你正在檢查前的位置你做翻譯。這意味着文本字段在無效位置結束,之後if塊永遠不會到達。

這是一個稍微不同的方式來處理這個問題,並表示該文本字段達到正確到了極限的邊緣:

func draggedView(_ sender: UIPanGestureRecognizer) { 

    guard let senderView = sender.view else { 
    return 
    } 

    var translation = sender.translation(in: view) 

    translation.x = max(translation.x, MyimageView.frame.minX - bottomTextField.frame.minX) 
    translation.x = min(translation.x, MyimageView.frame.maxX - bottomTextField.frame.maxX) 

    translation.y = max(translation.y, MyimageView.frame.minY - bottomTextField.frame.minY) 
    translation.y = min(translation.y, MyimageView.frame.maxY - bottomTextField.frame.maxY) 

    senderView.center = CGPoint(x: senderView.center.x + translation.x, y: senderView.center.y + translation.y) 
    sender.setTranslation(.zero, in: view) 
    view.bringSubview(toFront: senderView) 
} 

我也作出了通過增加在guard說法有點更安全頂部和去除力量解開。

+0

當我改變文本字段的位置並進行更改時,文本字段再次轉到圖像視圖的中心。我希望保持它的位置。我該如何解決這個問題?謝謝! –

+0

這可能是自動佈局約束覆蓋您的翻譯。我會提出這個問題作爲一個新問題。 – ganzogo