Swift imageView 动画不起作用
Swift imageView animation doesn't work
我有创建动画的代码:
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 没有显示。
试试这个..
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
如果你想为约束设置动画,你可以使用这个
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()
}
您应该在动画块之前设置约束的常量,并在内部调用 layoutIfNeeded
self.imageViewWidth.constant = 500
self.imageViewHeight.constant = 500
UIView.animate(withDuration: 10) {
self.layoutIfNeeded()
}
在动画块中有些东西是有意义的(此处:UIView.animate
)。创建更新的图像视图不是其中之一。 addSubView
.
也不是
问题是您完全重新分配给您的 imageview 变量 - 在动画块中创建一个新变量。
您应该在执行 UIView.animate.
之前创建图像视图并将其完全添加到主视图
动画是改变对象的可见属性,而不是重新创建它们。如果你想改变帧,只需在动画块中执行以下操作:
self.imageView.frame = CGRect(x: 10, y: 10, width: 500, height: 500)
您也可以根据您的约束要求调用layoutSubviews()
或layoutIfNeeded()
,在UIView.animate.
内
你的问题在哪里
问题 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()
}
希望,它会成功!
我有创建动画的代码:
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 没有显示。
试试这个..
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
如果你想为约束设置动画,你可以使用这个
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()
}
您应该在动画块之前设置约束的常量,并在内部调用 layoutIfNeeded
self.imageViewWidth.constant = 500
self.imageViewHeight.constant = 500
UIView.animate(withDuration: 10) {
self.layoutIfNeeded()
}
在动画块中有些东西是有意义的(此处:UIView.animate
)。创建更新的图像视图不是其中之一。 addSubView
.
问题是您完全重新分配给您的 imageview 变量 - 在动画块中创建一个新变量。
您应该在执行 UIView.animate.
动画是改变对象的可见属性,而不是重新创建它们。如果你想改变帧,只需在动画块中执行以下操作:
self.imageView.frame = CGRect(x: 10, y: 10, width: 500, height: 500)
您也可以根据您的约束要求调用layoutSubviews()
或layoutIfNeeded()
,在UIView.animate.
你的问题在哪里
问题 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()
}
希望,它会成功!