簡體   English   中英

Swift:使用約束平移UIImage

[英]Swift: Pan UIImage using constraints

我的viewController中有一個UIImage ,正在使用UIPanGesture 我目前正在根據RayWenderlich教程使用以下代碼來移動它。

@IBAction func panImage(sender: UIPanGestureRecognizer) {
let translation = sender.translationInView(self.view)

if let view = sender.view {
        view.center = CGPoint(x:view.center.x + translation.x,
            y:view.center.y + translation.y)
        exitButton1.center = CGPoint(x:exitButton1.center.x + translation.x, y:exitButton1.center.y + translation.y)
    } 
sender.setTranslation(CGPointZero, inView: self.view)
}

我正在為此應用程序使用auto layout ,並被告知應改為使用autoLayoutConstraints移動UIImage 我更改為以下代碼來移動image ,但是圖像現在在整個屏幕上跳躍。

let translation = sender.translationInView(self.view)
image1ConstraintX.constant = image1ConstraintX.constant + translation.x
image1ConstraintY.constant = image1ConstraintY.constant + translation.y

有沒有使用constraints移動image的更好方法? 可以使用第一種方法,然后根據最終位置更新constraints嗎? 如果正確完成,第二種移動image方法會如何?

一般來說,如果視圖具有有效的自動布局約束,則不應直接設置其frame 這是因為您的更改將在下次布局引擎對相關視圖進行傳遞時被覆蓋,並且您無法控制何時進行更改。

您更新相關約束constant的解決方案是正確的。 如果您發現自己做了很多事情,則可能需要編寫一個使用CGPoint和視圖並更新相關約束的方法。

可以使用第一種方法,然后根據最終位置更新約束嗎?

是的,但是您可能不想這么做。 為此,您將刪除或禁用約束,在用戶平移時修改frame ,並在用戶完成平移后,在每個約束上設置constant ,然后重新啟用布局約束。 這將比必需的更為復雜。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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