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