如何在图像中添加快速弹簧动画?

时间:2016-04-03 10:57:19

标签: ios swift animation uiviewanimation

我已经为图像做了布局。所以我没有任何CGPoint x和y值。 Storyboard picture 正如你在图片上看到的那样,我制作了5个圆圈和一个主圆圈。当用户打开应用程序时,我想让这5个圆圈来自主圆圈后面。我做了很多研究,我发现我可以使用弹簧动画方法,因为它看起来更逼真,物理等等。然而,它只是没有成功。

首先,我改变圆圈1的中心并将其发送到主圆圈的背面(它没有工作)由于失败,圆圈不会从后面上升。

我不知道为什么我无法改变圆圈的位置。是因为我已经做好了布局吗?

这是我的代码:

@IBOutlet weak var mainCircle: UIButton!
@IBOutlet weak var circle1: UIImageView!



override func viewDidAppear(animated: Bool) {

self.circle1.center = self.mainCircle.center

    UIView.animateWithDuration(0.5, delay: 0.5, usingSpringWithDamping: 0.9, initialSpringVelocity: 0.0, options: [] , animations: {
        self.circle1.center = CGPointMake(160, 219)
        }, completion: nil)
}

请帮我解决这个问题。 非常感谢。

3 个答案:

答案 0 :(得分:1)

将options参数设置为[],这会在弹簧动画中将选项设置为空。

对于您的动画,请输入以下行:

self.circle1.center = self.mainCircle.center

viewDidLoad()方法内部。

然后,在弹簧动画中,更改代码,以便使用mainCirle的相对位置计算位置,而不是固定值。像这样:

self.circle1.center = CGPointMake(self.mainCircle.center.x-75, self.mainCircle.center.x-75)

您可以将此点更改为您希望圆圈从主圆圈进入的任何方向。

完整代码:

override func viewDidLoad() {
    super.viewDidLoad()
    self.circle1.center = self.mainCircle.center
}

override func viewDidAppear(animated: Bool) {
    UIView.animateWithDuration(0.5, delay: 0.5, usingSpringWithDamping: 0.9, initialSpringVelocity: 0.0, options: [] , animations: {
        self.circle1.center = CGPointMake(self.mainCircle.center.x-75, self.mainCircle.center.x-75)
    }, completion: nil)
}

答案 1 :(得分:0)

有一个非常有用的库来简化值得研究的Spring动画。您可以在下面下载:

https://github.com/MengTo/Spring

我的应用中有很多动画,这让它变得非常简单。您可能希望将所有圆圈设置为中心,然后更改其x,y并使用animateTo()。

答案 2 :(得分:0)

    let identityAnimation = CGAffineTransform.identity
    let scaleOfIdentity = identityAnimation.scaledBy(x: 0.001, y: 0.001)
    slideActionComponentCollectionView.transform = scaleOfIdentity
    self.addSubview(slideActionComponentCollectionView)
    UIView.animate(withDuration: 0.3/1.5, animations: {
        let scaleOfIdentity = identityAnimation.scaledBy(x: 1.1, y: 1.1)
        self.slideActionComponentCollectionView.transform = scaleOfIdentity
    }, completion: {finished in
        UIView.animate(withDuration: 0.3/2, animations: {
            let scaleOfIdentity = identityAnimation.scaledBy(x: 0.9, y: 0.9)
            self.slideActionComponentCollectionView.transform = scaleOfIdentity
        }, completion: {finished in
            UIView.animate(withDuration: 0.3/2, animations: {
                self.slideActionComponentCollectionView.transform = identityAnimation
            })
        })
    })