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