Swift 为什么UIView&;UIImageView是否以不同方式设置动画?
我有4个按钮,都使用相同的动画功能Swift 为什么UIView&;UIImageView是否以不同方式设置动画?,swift,uiview,uiimageview,core-animation,uiviewanimation,Swift,Uiview,Uiimageview,Core Animation,Uiviewanimation,我有4个按钮,都使用相同的动画功能 无延迟图像视图 带延迟的图像视图 立即查看 延迟查看 我的代码: import UIKit class ViewController: UIViewController { @IBAction func imageViewithoutDelay(_ sender: AnyObject) { let circleImage = UIImageView() // kindly add your own image.
- 无延迟图像视图
- 带延迟的图像视图
- 立即查看
- 延迟查看
import UIKit
class ViewController: UIViewController {
@IBAction func imageViewithoutDelay(_ sender: AnyObject) {
let circleImage = UIImageView()
// kindly add your own image.
circleImage.image = UIImage(named: "empty")
animate(inputView: circleImage, delay: false)
}
@IBAction func imageViewWithDelay(_ sender: UIButton) {
let circleImage = UIImageView()
circleImage.image = UIImage(named: "empty")
animate(inputView: circleImage, delay: true)
}
func animate(inputView : UIView, delay: Bool){
inputView.layer.cornerRadius = inputView.frame.size.width / 2
inputView.clipsToBounds = true
inputView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(inputView)
let screenSize = UIScreen.main.bounds
let screenHeight = screenSize.height * 0.10
inputView.center.y = screenHeight
view.setNeedsLayout()
view.setNeedsDisplay()
if delay == true{
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1), execute: {
UIView.animate(withDuration: 2.5, animations: {
inputView.alpha = 0.0
let screenSize = UIScreen.main.bounds
let screenHeight = screenSize.height * 0.10
inputView.center.y -= screenHeight
})
})} else{
UIView.animate(withDuration: 2.5, animations: {
inputView.alpha = 0.0
let screenSize = UIScreen.main.bounds
let screenHeight = screenSize.height * 0.10
inputView.center.y -= screenHeight
})
}
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
有趣的是UIview
和UIImageView
的不同行为
如果使用延迟,则UIImageView
实例仅按预期(从原点向上)设置动画。但是,在不使用延迟块的情况下,UIImageView实例首先下拉,然后向上移动到其原点)
ui视图
不会显示不同的行为。它从原点开始动画并向上移动
这是虫子吗
这个问题与原来的问题是相切的。无论你如何划分,你所做的都是错误的。不能同时添加视图和设置其动画。只能对界面中已存在的视图设置动画 这就是为什么如果添加延迟,它对图像视图有效:在设置动画时,图像视图已经进入界面,并且界面已经稳定下来
它似乎对非imageview有效的事实是愚蠢的运气。我明白了。1.当它到达动画行时,它不是已经在界面中了吗?2.为什么会这样?我的意思是为什么它会移动?不应该有一个原因来解释为什么它不能发生,为什么它可以用于imageView。我不知道为什么它适用于非imageView。-直到runloop有机会循环,它才“在接口中”。即使延迟为零也应该足够了,因为您将在下一次运行循环中返回主线程。在您的图像视图中试用,然后查看。您的意思是更改为
。秒(0)
?我这样做了,现在我的两个图像视图都下拉下来,然后设置动画到原点。我也尝试了.nanoseconds(1)
,但仍然得到了同样的错误结果。也许它得到了优化。我想用DispatchQueue.async{…}
代替asyncAfter
。或者使用my并尝试delay(0)
——但如果这不起作用,请尝试类似delay(.01)
的方法。让我们看看你发现了什么。。。