我的UIImage
中有viewController
我正在使用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
,并且已被告知应该使用UIImage
移动autoLayoutConstraints
。我更改为以下代码以移动image
,但是,图像现在在屏幕上跳跃。
let translation = sender.translationInView(self.view)
image1ConstraintX.constant = image1ConstraintX.constant + translation.x
image1ConstraintY.constant = image1ConstraintY.constant + translation.y
使用image
移动constraints
是否有更好的方法?是否可以使用第一种方法,然后根据最终位置更新constraints
?如果正确完成,第二种移动image
的方法会怎样?
答案 0 :(得分:2)
一般来说,如果视图具有有效的自动布局约束,则不应直接设置其frame
。这是因为下次布局引擎传递相关视图时,您的更改将被覆盖,而您无法控制何时会发生这种情况。
更新相关约束的constant
的解决方案是正确的。如果你发现自己做了很多,你可能想要编写一个带有CGPoint
和视图的方法,并更新相关的约束。
可以使用第一种方法,然后根据最终位置更新约束吗?
是的,但你可能不想这样做。要完成此操作,您将删除或禁用约束,在用户平移时修改frame
,并在用户完成平移后,在每个约束上设置constant
,然后重新启用布局约束。这将比必要的更复杂。