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,并被告知应该将UIImageautoLayoutConstraints 一起移动。我更改为以下代码来移动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的主要内容,如果未能解决你的问题,请参考以下文章

快速平移手势移动约束

约束 UIScrollView 平移?

swift : UIView 的平滑翻译与 iOS 控制面板完全一样(跟随用户手指,使用平移)

在横向调整和放置旋转视图:更新约束或平移/更改框架?

如何检测哪个视图正在平移手势 Swift

在 iOS Swift 中使用键盘平移手势处理文本输入视图移动