Swift:使用约束来泛UIImage

时间:2015-05-24 03:40:23

标签: ios swift uiimage autolayout constraints

我的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的方法会怎样?

1 个答案:

答案 0 :(得分:2)

一般来说,如果视图具有有效的自动布局约束,则不应直接设置其frame。这是因为下次布局引擎传递相关视图时,您的更改将被覆盖,而您无法控制何时会发生这种情况。

更新相关约束的constant的解决方案是正确的。如果你发现自己做了很多,你可能想要编写一个带有CGPoint和视图的方法,并更新相关的约束。

  

可以使用第一种方法,然后根据最终位置更新约束吗?

是的,但你可能不想这样做。要完成此操作,您将删除或禁用约束,在用户平移时修改frame,并在用户完成平移后,在每个约束上设置constant,然后重新启用布局约束。这将比必要的更复杂。