2017-10-10 18 views
0

저는 CAShapeLayer에서 CAAnimation을 사용하여 왼쪽에서 오른쪽으로 스트로크하는 선을 간단하게 애니메이션으로 만듭니다 (더 복잡한 프로그램의 축소 버전 일뿐입니다). 나는 시작 부분이 거의 순간적임을 보여주기 위해 속도를 줄 였고 나머지는 정상적으로 움직였다.CAAnimation에서 UIViewAnimationCurve 옵션을 사용하는 방법

저는 UIView.animate의 옵션을 사용하여 UIViewAnimationCurve 옵션 (예 : .EaseIn 또는 .Linear)을 설정할 수 있음을 확인했습니다. CAShapeLayer에 CAAnimation을 임베드 할 때 이러한 옵션을 설정할 수 있습니까? 그리고 당신이 그것을 실행하기를 원할 때마다 애니메이션을 생성 할 필요가 있습니까, 아니면 "애니메이션 실행"명령이 있습니까? 사전에

// the containing UIView is called mainView 

    mainView.layer.sublayers = nil 

    // create a line using a UIBezierPath 

    let path = UIBezierPath() 
    path.move(to: CGPoint(x: 100, y: 100)) 
    path.addLine(to: CGPoint(x: 300, y: 100)) 

    // create a CAShapeLayer 

    let shapeLayer = CAShapeLayer() 
    shapeLayer.frame = CGRect(x: 0, y: 0, width: 1024, height: 1024) 
    shapeLayer.strokeColor = UIColor.green.cgColor 
    shapeLayer.lineWidth = 100 
    shapeLayer.path = path.cgPath 

    // create the animation 

    mainView.layer.addSublayer(shapeLayer) 
    let animation = CABasicAnimation(keyPath: "LetterStroke") 

    animation.fromValue = 0 
    animation.toValue = 1 
    animation.duration = 10 

    shapeLayer.add(animation, forKey: "animation") 

많은 감사 :

다음은 내 컷 다운 코드입니다.

답변

0

timingFunction 속성은 CABasicAnimation이어야합니다. 문제는 라인 애니메이션 방식의 내무반을 시작 나타났다이었다

animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn) 
+0

정답이며 많은 도움을드립니다. 나는 실제로 당신이 아래에서 볼 수 있듯이 다른 곳에 문제가 있다는 것을 발견했다. 그러나 실제로 당신이 말한 것처럼 내 질문에 답했다. –

0

같은 these 미리 정의 된 타이밍 기능을 허용하는 생성자가 있습니다. 나는 코드의 잘못된 줄에 밝혀졌다 무엇을 넣어 무시 내 질문.

shapeLayer.lineCap = kCALineCapRound

이를, (100)의 선폭과 함께, 라인이 처음부터 방식의 약 분기 시작했다. lineWidth를 작게 만들었고 잘 작동했습니다.