向UIImageView添加动画

时间:2015-08-02 17:07:45

标签: ios swift animation

我正在尝试使用此CAAnimation为imageView设置动画,因此我将以下扩展添加到UIImageView:

extension UIImageView {

var ovalPathSmall: UIBezierPath {
    return UIBezierPath(ovalInRect: CGRect(x: 50.0, y: 50.0, width: 0.0, height: 0.0))
}

var ovalPathLarge: UIBezierPath {
    return UIBezierPath(ovalInRect: CGRect(x: 2.5, y: 17.5, width: 95.0, height: 95.0))
}

var ovalPathSquishVertical: UIBezierPath {
    return UIBezierPath(ovalInRect: CGRect(x: 2.5, y: 20.0, width: 95.0, height: 90.0))
}

var ovalPathSquishHorizontal: UIBezierPath {
    return UIBezierPath(ovalInRect: CGRect(x: 5.0, y: 20.0, width: 90.0, height: 90.0))
}

func wobble() {
    let animationDuration: CFTimeInterval = 0.3
    // 1
    var wobbleAnimation1: CABasicAnimation = CABasicAnimation(keyPath: "path")
    wobbleAnimation1.fromValue = ovalPathLarge.CGPath
    wobbleAnimation1.toValue = ovalPathSquishVertical.CGPath
    wobbleAnimation1.beginTime = 0.0
    wobbleAnimation1.duration = animationDuration

    // 2
    var wobbleAnimation2: CABasicAnimation = CABasicAnimation(keyPath: "path")
    wobbleAnimation2.fromValue = ovalPathSquishVertical.CGPath
    wobbleAnimation2.toValue = ovalPathSquishHorizontal.CGPath
    wobbleAnimation2.beginTime = wobbleAnimation1.beginTime + wobbleAnimation1.duration
    wobbleAnimation2.duration = animationDuration

    // 3
    var wobbleAnimation3: CABasicAnimation = CABasicAnimation(keyPath: "path")
    wobbleAnimation3.fromValue = ovalPathSquishHorizontal.CGPath
    wobbleAnimation3.toValue = ovalPathSquishVertical.CGPath
    wobbleAnimation3.beginTime = wobbleAnimation2.beginTime + wobbleAnimation2.duration
    wobbleAnimation3.duration = animationDuration

    // 4
    var wobbleAnimation4: CABasicAnimation = CABasicAnimation(keyPath: "path")
    wobbleAnimation4.fromValue = ovalPathSquishVertical.CGPath
    wobbleAnimation4.toValue = ovalPathLarge.CGPath
    wobbleAnimation4.beginTime = wobbleAnimation3.beginTime + wobbleAnimation3.duration
    wobbleAnimation4.duration = animationDuration

    // 5
    var wobbleAnimationGroup: CAAnimationGroup = CAAnimationGroup()
    wobbleAnimationGroup.animations = [wobbleAnimation1, wobbleAnimation2, wobbleAnimation3,
        wobbleAnimation4]
    wobbleAnimationGroup.duration = wobbleAnimation4.beginTime + wobbleAnimation4.duration
    wobbleAnimationGroup.repeatCount = 2
    self.layer.addAnimation(wobbleAnimationGroup, forKey: nil)

}

然后这到我的viewDiLoad:

     NSTimer.scheduledTimerWithTimeInterval(0.3, target: self, selector: "x",
        userInfo: nil, repeats: false)

func x() {
    questionIcon.wobble()
}

questionIcon是我要制作动画的图像的出口,但它不动!代码有什么问题?感谢

1 个答案:

答案 0 :(得分:1)

一点也不清楚你要做什么;你现在的代码是无稽之谈。你正在制作这样的动画对象:

CABasicAnimation(keyPath: "path")

但是UIImageView没有path属性,所以你没有动画任何东西。 UIImageView可能具有可动画path属性的整个概念只是你脑子里想的东西。你没有这样做......

允许使用UIImageView做的是准备一系列图像(你可以在代码中创建)并将它们交给图像视图以按顺序播放(作为其{{ 1}})像卡通的帧。也许这就是你应该在这里采取的方向。