有一个名为scrubberImageView的ImageView,它位于故事板中,我设置了它的高度和宽度高度百分比和centerX。当我在方法viewDidAppear()中设置scrubberImageView的中心时,它失败并显示故事板中设置的帧。但是当我用下面的代码时,框架将被正确设置。
delay(0.1) {
UIView.animate(withDuration: 0.3, delay: 0.1, options: .curveEaseOut, animations: {
self.scrubberImageView.center = CGPoint(x: 50, y:self.scrubberImageView.center.y)
}, completion: nil)
}
我不知道是否有其他方法可以解决这个方法,我试着使用下面的代码。
self.scrubberImageView.updateConstraints()
你们有一些方法可以解决这个问题吗?提前谢谢!
答案 0 :(得分:0)
您正在尝试将自动布局约束与手动框架布局相结合。我强烈反对这一点。
如果要移动图像视图,请不要使用自动布局将其放在首位,然后手动计算并设置所需的大小,或者改为为约束值设置动画。
扩展后者,你拥有的centerX约束,假设它的常量为0,将把图像视图放在超视图的中间。
如果为此约束添加插座,则可以在代码中更改其常量。将此设置为20将向右移动图像视图20pts(因为它将centerX偏移20),并将其设置为-20,您猜对了,将其向左移动20pts。
在代码中的任何约束更改后,您应始终致电self.view.layoutIfNeeded()
以应用更改,否则您将看不到它们!
请参阅以下示例,该示例将图像设置为右侧50点的图像:
self.imageViewCenterX.constant = 50
UIView.animate(duration: 5) {
self.view.layoutIfNeeded()
}
注意我只在动画块中包含对layoutIfNeeded
的调用,没有必要在此处包含常量值设置。
动画回到中心只是将值设置为0并按上述方式调用layoutIfNeeded
的情况!