![](/img/trans.png)
[英]How to wait AppDelegate is finish before ViewController start?
[英]How to make UIImageView animation wait for dynamicAnimator behavior to finish to start animating
我正在为一个应用程序开发 animation,其中一个鞋盒从屏幕顶部掉落并落在基座上,然后鞋盒打开。
我想知道是否有任何方法可以使 animation 用于打开盒子以等待盒子在执行打开 animation 之前固定在基座上?
这是我的代码:
//dropping box from off screen and having it stop on the pedestal
dynamicAnimator = UIDynamicAnimator(referenceView: self.view)
//gravity
gravityBehavior = UIGravityBehavior(items: [shoeBoxImage])
dynamicAnimator.addBehavior(gravityBehavior)
//collision
collisionBehavior = UICollisionBehavior(items: [shoeBoxImage])
collisionBehavior.addBoundary(withIdentifier: "Pedestal" as NSCopying, from: CGPoint(x: view.frame.minX, y: 545), to: CGPoint(x: view.frame.maxX, y: 545))
dynamicAnimator.addBehavior(collisionBehavior)
//bouncing effect
bouncingBehavior = UIDynamicItemBehavior(items: [shoeBoxImage])
bouncingBehavior.elasticity = 0.40
dynamicAnimator.addBehavior(bouncingBehavior)
//Load Data Here
Task {
Shoes = try await queryShoes()
}
//Opening the box
shoeBoxImage.shoeBox.animationImages = boxOpeningAnimation
shoeBoxImage.shoeBox.animationDuration = 1.0
shoeBoxImage.shoeBox.animationRepeatCount = 1
shoeBoxImage.shoeBox.contentMode = .scaleAspectFit
shoeBoxImage.shoeBox.startAnimating()
shoeBoxImage.shoeBox.image = UIImage(named: "frame11")
除了检查图像视图的中心 position 以设置布尔值,然后使用所述布尔值确定是否开始动画之外,还有什么方法可以做到这一点吗? 如果是这样,有人可以解释一下该怎么做吗? 将不胜感激。
有一个委托方法可用于了解动态动画制作器何时暂停。
分配一个 object 作为动画师的代表
dynamicAnimator.delegate = self
然后实现dynamicAnimatorDidPause
方法。
extension ViewController: UIDynamicAnimatorDelegate {
public func dynamicAnimatorDidPause(_ animator: UIDynamicAnimator) {
//Start your box opening animation here...
}
}
以下是UIDynamicAnimator Apple Developer Documentation的摘录。
所有类型的动态动画师都具有以下特征:
每个动态动画师都独立于您创建的其他动态动画师
您可以将给定的动态项目与多个行为相关联,前提是这些行为属于同一动画师
动画师在其所有项目都位于 rest 时自动暂停,并在行为参数更改或添加或删除行为或项目时自动恢复
您可以使用UIDynamicAnimatorDelegate
协议的dynamicAnimatorDidPause(_:)
和dynamicAnimatorWillResume(_:)
方法实现一个委托来响应动画师暂停/恢复状态的变化。
你必须在这里注意动画师可能不会调用dynamicAnimatorDidPause
方法,即使看起来动画已经停止。 这可能是由于动画 object 的参数发生了一些微小的变化,这些变化不一定是肉眼可见的。 如果发生这种情况,您必须考虑更改一些 animation 属性,以便 animation 快速停止而不会摆动。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.