我有创建动画的代码:
var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
imageView = UIImageView(frame:CGRect(x: 10, y: 10, width: 10, height: 10))
imageView.image = UIImage(named:"2.png")
UIView.animate(withDuration: 5) {
self.imageView = UIImageView(frame:CGRect(x: 10, y: 10, width: 500, height: 500))
self.view.addSubview(self.imageView)
self.view.layoutIfNeeded()
}
}
但是动画不起作用。和imageView没有显示。
答案 0 :(得分:3)
您应该在动画块之前和内部设置约束的常量,只需调用layoutIfNeeded
self.imageViewWidth.constant = 500
self.imageViewHeight.constant = 500
UIView.animate(withDuration: 10) {
self.layoutIfNeeded()
}
答案 1 :(得分:1)
尝试一下。
UIView.animate(withDuration: 10) {
self.imageViewWidth.constant = 500
self.imageViewHeight.constant = 500
self.view.updateConstraintsIfNeeded()
self.view.layoutIfNeeded()
}
要减小和增大大小,您必须使用“完成时处理程序”
UIView.animate(withDuration: 2, animations: {
self.imageViewWidth.constant = 10
self.imageViewHeight.constant = 10
self.view.layoutIfNeeded()
}) { (true) in
UIView.animate(withDuration: 10, animations: {
self.imageViewWidth.constant = 500
self.imageViewHeight.constant = 500
self.view.layoutIfNeeded()
})
}
如果要立即开始减少,请将第一个withDuration更改为0
答案 2 :(得分:1)
在动画块中有一些有意义的地方(这里:UIView.animate
)。创建较新的图像视图不是其中之一。 addSubView
都不是。
问题在于您将完全重新分配给imageview变量-在动画块中创建一个新变量。
您应该先创建图像视图并将其完全添加到主视图中,然后再执行UIView.animate.
动画正在更改对象的可见属性,而不是重新创建它们。如果要更改帧,只需在动画块中执行以下操作:
self.imageView.frame = CGRect(x: 10, y: 10, width: 500, height: 500)
您还可以根据自己的约束要求在layoutSubviews()
内致电layoutIfNeeded()
或UIView.animate.
答案 3 :(得分:1)
您的问题出在哪里
问题1
imageView = UIImageView(frame:CGRect(x: 10, y: 10, width: 10, height: 10))
imageView.image = UIImage(named:"2.png")
在这里,您创建了一个图像视图的新实例,该实例从未添加到viewcontroller的视图堆栈中。您应该将此视图添加到堆栈中。这些代码行对动画性能没有任何影响。
问题2
UIView.animate(withDuration: 5) {
self.imageView = UIImageView(frame:CGRect(x: 10, y: 10, width: 500, height: 500))
self.view.addSubview(self.imageView)
self.view.layoutIfNeeded()
}
}
您初始化了另一个图像视图,并将其添加为子视图。该图像视图没有任何图像或背景色,因此您看不到设备屏幕上发生任何事情。您不应该在这里做这些事情。 View.animate块不需要这些东西。您应该了解的有关动画的几件事。 How animation works
解决方案:
请尝试这些代码行。
// initial frame
var frame:CGRect = CGRect(x: 10, y: 10, width: 10, height: 10)
// create imageview and add this into view stack
self.imageView = UIImageView(frame:frame)
self.imageView.image = UIImage(named:"2.png")
self.view.addSubview(self.imageView)
// set new height & width
frame.size.width = 500;
frame.size.height = 500;
// animate view
UIView.animate(withDuration: 5) {
self.imageView.frame = frame;
self.view.layoutIfNeeded()
}
希望,它将起作用!
答案 4 :(得分:-1)
如果您想设置约束动画,则可以使用
self.imageViewWidth.constant = 500
self.imageViewHeight.constant = 500;
UIView.animate(withDuration: 10) {
// if you are doing this in View controller then
self.view.layoutSubviews()
// if you are doing this in View then
self.layoutSubviews()
}