Swift:使用约束平移 UIImage
Posted
技术标签:
【中文标题】Swift:使用约束平移 UIImage【英文标题】:Swift: Pan UIImage using constraints 【发布时间】:2015-05-24 03:40:22 【问题描述】:我的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
,并被告知应该将UIImage
与autoLayoutConstraints
一起移动。我更改为以下代码来移动image
,但是,图像现在在屏幕上跳跃。
let translation = sender.translationInView(self.view)
image1ConstraintX.constant = image1ConstraintX.constant + translation.x
image1ConstraintY.constant = image1ConstraintY.constant + translation.y
有没有更好的方法来使用constraints
移动image
?可以使用第一种方法,然后根据最终位置更新constraints
吗?如果正确执行,移动image
的第二种方法会如何?
【问题讨论】:
【参考方案1】:一般来说,如果一个视图有活动的自动布局约束,你不应该直接设置它的frame
。这是因为您的更改将在下次布局引擎通过相关视图时被覆盖,而您无法控制何时发生。
您更新相关约束的constant
的解决方案是正确的。如果您发现自己经常这样做,您可能需要编写一个方法,该方法接受 CGPoint
和一个视图,并更新相关约束。
可以使用第一种方法,然后根据最终位置更新约束吗?
是的,但您可能不想这样做。为此,您将删除或禁用约束,在用户平移时修改frame
,一旦用户完成平移,在每个约束上设置constant
,然后重新启用布局约束。这将比必要的复杂。
【讨论】:
以上是关于Swift:使用约束平移 UIImage的主要内容,如果未能解决你的问题,请参考以下文章