Swift中的UIImageView动画具有时间延迟

时间:2014-12-22 20:41:36

标签: ios image animation swift uiimageview

我遇到了这个问题,我想让UIImage在两秒钟内发光,然后再回到正常状态。

鉴于此问题,我现在所拥有的是:

我引用了图像视图,从0到9。

@IBOutlet weak var imageOne: UIImageView!
@IBOutlet weak var imageTwo: UIImageView!

然后我将它们添加到viewDiDLoad()函数中的SubViews:

override func viewDidLoad() {
        super.viewDidLoad()
        self.view.addSubview(imageOne)
        self.view.addSubview(imageTwo)
        etc.
}

以下是我对着色功能的实现:

func colorize(imageView: UIImageView, color: CGColorRef) {
        imageView.layer.shadowColor = color
        imageView.layer.shadowRadius = 7.0
        imageView.layer.shadowOpacity = 0.9
        imageView.layer.shadowOffset = CGSizeZero
        imageView.layer.masksToBounds = false
}

现在,我正在尝试为通过此调用的两个图像视图设置动画。 ab只是从上一个视图中获得的randoms。在这个例子中,它们将是1和3。:

UIView.animateWithDuration(2.0, delay: 0, options: nil, animations: { () -> Void in
        self.colorize(labelArray[a.toInt()!], color:self.green)
}, completion: nil)

UIView.animateWithDuration(2.0, delay: 2.0, options: nil, animations: { () -> Void in
        self.colorize(labelArray[b.toInt()!], color:self.cyan)
}, completion: nil)

现在,这就是事先看来的样子 -

enter image description here

这就是之后的情况,但这两种动画同时发生。没有过渡。它只是自动应用发光 -

enter image description here

感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

由于您正在尝试动画UIImageView图层,因此请尝试使用Core Animation而不是UIView动画块,因为必须使用Core Animation为视图的阴影层设置动画。如果您只想淡入阴影,请尝试使阴影不透明度设置动画:

override func performGlowAnimations {

    self.colorize(labelArray[a.toInt()!], color:self.green)

    // Delay the second call by 2 seconds
    let delay = 2.0 * Double(NSEC_PER_SEC)
    var time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
    dispatch_after(time, dispatch_get_main_queue(), {
        self.colorize(labelArray[b.toInt()!], color:self.cyan)
    })
}

func colorize(imageView: UIImageView, color: CGColorRef) {

    // Set the image's shadowColor, radius, offset, and
    // set masks to bounds to false
    imageView.layer.shadowColor = color
    imageView.layer.shadowRadius = 7.0
    imageView.layer.shadowOffset = CGSizeZero
    imageView.layer.masksToBounds = false

    // Animate the shadow opacity to "fade it in"
    let shadowAnim = CABasicAnimation()
    shadowAnim.keyPath = "shadowOpacity"
    shadowAnim.fromValue = NSNumber(float: 0.0)
    shadowAnim.toValue = NSNumber(float: 0.9)
    shadowAnim.duration = 2.0

    imageView.layer.addAnimation(shadowAnim, forKey: "shadowOpacity")
    imageView.layer.shadowOpacity = 0.9
}