Swift: 不能改变imageView frame,imageView在storyboard中
Swift: Can not change the imageView frame, the imageView is in the storyboard
故事板中有一个名为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()
你们有什么方法可以解决这个问题吗?提前致谢!
您正在尝试将自动布局约束与手动框架布局相结合。我强烈反对这样做。
如果您想四处移动图像视图,请不要首先使用自动布局将其定位并手动计算并设置其所需的大小,或者改为设置约束值的动画。
扩展后者,您拥有的 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
的情况!
故事板中有一个名为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()
你们有什么方法可以解决这个问题吗?提前致谢!
您正在尝试将自动布局约束与手动框架布局相结合。我强烈反对这样做。
如果您想四处移动图像视图,请不要首先使用自动布局将其定位并手动计算并设置其所需的大小,或者改为设置约束值的动画。
扩展后者,您拥有的 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
的情况!