我正在嘗試製作一個類似於Android材質設計循環未確定活動指示器的自定義活動指示器。基本上我想畫兩次並清除它,但擦除和繪圖不會同時發生,也不會同時發生。這是我到目前爲止:連接兩個strokeEnd動畫
let progressLayer = CAShapeLayer()
progressLayer.strokeColor = UIColor.red().cgColor
progressLayer.fillColor = nil
progressLayer.lineWidth = 2
let drawAnimation = CABasicAnimation(keyPath: "strokeEnd")
drawAnimation.duration = duration/2
drawAnimation.fromValue = 0
drawAnimation.toValue = 1
drawAnimation.isRemovedOnCompletion = false
drawAnimation.fillMode = kCAFillModeForwards
let eraseAnimation = CABasicAnimation(keyPath: "strokeStart")
eraseAnimation.duration = duration/2
eraseAnimation.beginTime = 0.2
eraseAnimation.fromValue = 0
eraseAnimation.toValue = 0.4
eraseAnimation.isRemovedOnCompletion = false
eraseAnimation.fillMode = kCAFillModeForwards
let endDrawAnimation = CABasicAnimation(keyPath: "strokeEnd")
endDrawAnimation.beginTime = duration/2
endDrawAnimation.duration = duration/2
endDrawAnimation.fromValue = 0
endDrawAnimation.toValue = 1
endDrawAnimation.isRemovedOnCompletion = false
endDrawAnimation.fillMode = kCAFillModeForwards
let endEraseAnimation = CABasicAnimation(keyPath: "strokeStart")
endEraseAnimation.beginTime = duration/2
endEraseAnimation.duration = duration/4
endEraseAnimation.fromValue = 0.4
endEraseAnimation.toValue = 1
endEraseAnimation.isRemovedOnCompletion = false
endEraseAnimation.fillMode = kCAFillModeForwards
let endEraseAnimation2 = CABasicAnimation(keyPath: "strokeStart")
endEraseAnimation2.beginTime = duration * 3/4
endEraseAnimation2.duration = duration/4
endEraseAnimation2.fromValue = 0
endEraseAnimation2.toValue = 1
endEraseAnimation2.isRemovedOnCompletion = false
endEraseAnimation2.fillMode = kCAFillModeForwards
let animations = CAAnimationGroup()
animations.duration = duration
animations.animations = [drawAnimation, eraseAnimation, endDrawAnimation, endEraseAnimation, endEraseAnimation2]
animations.isRemovedOnCompletion = false
animations.fillMode = kCAFillModeForwards
progressLayer.add(animations, forKey: "stroke")
該代碼做一切都如預期,除了一個問題。當第一個strokeEnd
動畫完成並且第二個動畫開始時,會出現一種閃光,意味着直到該點爲止繪製的圓的部分消失,然後再從0開始繪製。有沒有人有任何想法如何解決這個問題?
您的代碼顯示錯誤,當我嘗試編譯,請把你的真實的代碼,以幫助你 –
@ReinierMelian這是Swift 3代碼,確保你使用的是Xcode 8或者將它翻譯成Swift 2. @Banana,'progressLayer'是什麼? – JAL
'progressLayer'是一個'CAShapeLayer',我在上面的問題中加入了這個。 – Banana