有幾個回答的問題與我的相似,但是,它們都不能解決我的困境。我有一個UIImageView
,我在屏幕上移動UILongPressGesture
,我通過改變水平和垂直移動constraints
。如果這個image
沒有達到一定的距離,我希望它動畫回到原來的位置。我現在用的下面是我用的,試圖做到這一點的代碼示例:Swift:在UIImageView上製作動畫約束
if sender.state == UIGestureRecognizerState.Changed {
image1ConstraintX.constant = imageConstX + (translation.x - location.x)
image1ConstraintY.constant = imageConstY + (translation.y - location.y)
} else if sender.state == UIGestureRecognizerState.Ended {
var xPosition = self.image1.frame.origin.x + image1.frame.width/2
var yPosition = self.image1.frame.origin.y + image1.frame.width/2
imageConstX = image1ConstraintX.constant
imageConstY = image1ConstraintY.constant
if xPosition < 215 && yPosition < 210 {
self.image1ConstraintX.constant = 13
self.image1ConstraintY.constant = 17
UIView.animateWithDuration(1.3, delay: 0.0, options: nil, animations: {
self.view.layoutIfNeeded()
}, completion: nil)
}
location.x
和location.y
在別處定義爲用戶點擊
translation.x
和translation.y
位置被定義爲用戶在超級視圖中的位置
不用說,在平移image
時一切正常。它拖動,然後在手勢結束時停止。問題是,如果用戶沒有將image
拖動到特定位置,我想讓image
回到其原始位置,而不是平滑過渡,它會立即回到原來的位置,而不是動畫。根據類似問題的其他答案,我將設置約束,然後在animateWithDuration
中調用layoutIfNeeded
。
有什麼與autolayout
我失蹤了嗎?
爲了讓image
回到原來的位置,我需要更改什麼?
抱歉,錯誤的答案我做了一個快速的研究和一些測試在這裏,我有它的工作,看看我的答案我再次爲你編輯它。 – Icaro
你的更新答案應該可以工作,但是,由於某種原因,似乎任何時候一個'約束'被改變了'UIImageView'的位置在'animation'之外被更新。下面的@matt答案正在爲我工作。 – Ryguyu