繁体   English   中英

如何让 UIImageView animation 等待 dynamicAnimator 行为完成开始动画

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM