Ios 连续环中的CALayer梯度跃迁
我打算在连续循环中从CALayer渐变过渡设置动画,即从colorOne到colorTwo,然后从colorTwo到colorOne。我只在一个实例中实现了这个逻辑,但没有持续地实现。我该怎么做呢。代码如下:Ios 连续环中的CALayer梯度跃迁,ios,swift,Ios,Swift,我打算在连续循环中从CALayer渐变过渡设置动画,即从colorOne到colorTwo,然后从colorTwo到colorOne。我只在一个实例中实现了这个逻辑,但没有持续地实现。我该怎么做呢。代码如下: override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated); self.gradientOne = CAGradientLayer(); self.gradientOne?.
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated);
self.gradientOne = CAGradientLayer();
self.gradientOne?.frame = self.view.bounds;
self.gradientOne?.colors = [UIColor(red: 0.0/255.0, green: 150.0/255.0, blue: 123.0/255.0, alpha: 1.0).CGColor, UIColor(red: 0.0/255.0, green: 150.0/255.0, blue: 123.0/255.0, alpha: 1.0).CGColor]
self.view.layer.insertSublayer(self.gradientOne, atIndex: 0)
UIView.animateKeyframesWithDuration(3.0, delay: 0.0, options: UIViewKeyframeAnimationOptions.Repeat, animations: { () -> Void in
UIView.addKeyframeWithRelativeStartTime(0.0, relativeDuration: 3.0, animations: { () -> Void in
self.colorTimer = NSTimer.scheduledTimerWithTimeInterval(3.0, target: self, selector: "animateLayerToGreen", userInfo: nil, repeats: true);
self.animateLayerToBlue()
})
}, completion: nil)
}
func animateLayerToBlue(){
var fromColors = self.gradientOne?.colors
var toColors: [AnyObject] = [ UIColor.blueColor().CGColor, UIColor.blueColor().CGColor]
self.gradientOne!.colors = toColors
var animation : CABasicAnimation = CABasicAnimation(keyPath: "colors")
animation.fromValue = fromColors
animation.toValue = toColors
animation.duration = 4.00
animation.removedOnCompletion = true
animation.fillMode = kCAFillModeForwards
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
animation.delegate = self
self.gradientOne?.addAnimation(animation, forKey:"animateGradient")
}
func animateLayerToGreen(){
var fromColors = self.gradientOne?.colors
var toColors: [AnyObject] = [UIColor(red: 0.0/255.0, green: 150.0/255.0, blue: 123.0/255.0, alpha: 1.0).CGColor, UIColor(red: 0.0/255.0, green: 150.0/255.0, blue: 123.0/255.0, alpha: 1.0).CGColor]
self.gradientOne!.colors = toColors
var animation : CABasicAnimation = CABasicAnimation(keyPath: "colors")
animation.fromValue = fromColors
animation.toValue = toColors
animation.duration = 4.00
animation.removedOnCompletion = true
animation.fillMode = kCAFillModeForwards
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
animation.delegate = self
self.gradientOne?.addAnimation(animation, forKey:"animateGradient")
}
尝试设置:
animation.repeatCount = Float.infinity
animation.removedOnCompletion = false
希望它能起作用 请看CAKeyframe动画(以及repeatCount属性)@DavidRönnqvist hi,感谢您的回复。我已经根据您的建议编辑了代码,但没有产生预期的结果。谢谢您,这很有用,在过渡结束时,它会跳回到以前的颜色。如何使前后过渡尽可能平滑?