2017-01-22 8 views
1

가로로보기에는 좋아 보이는 CAKeyframeAnimation이 있지만 기기가 회전하면 애니메이션의 나머지 부분과 비교할 때 흔들리는 것은 아닙니다. 진행중인 애니메이션의 경로를 조정 (스케일) 할 수있는 방법이 있습니까?CoreAnimation 및 기기 회전

편집 : 추가 코드

 let circle = CAShapeLayer() 
     circle.path = UIBezierPath(roundedRect: CGRect(x: -60.0, y: -60.0, width: 100.0, height: 100.0), cornerRadius: 50.0).cgPath 
     circle.fillColor = UIColor.clear.cgColor 
     circle.strokeColor = UIColor.blue.cgColor 

     let animation = CAKeyframeAnimation(keyPath: "position") 
     animation.duration = (path["endTime"] as! Double) - (path["startTime"] as! Double) 
     animation.repeatCount = 0 
     animation.path = (path as! UIBezierPath).cgPath 
     animation.calculationMode = kCAAnimationPaced 
     animation.fillMode = kCAFillModeForwards 
     animation.isRemovedOnCompletion = false 

     circle.add(animation, forKey: "position") 
     self.view.layer.insertSublayer(circle, at: 5) 

문제가 UIBezierPath이 (앱에서 모두 지원) 세로 또는 가로 중 하나에 정의되어 있으므로이 생성 된 것을 같은 방향에서 재생이 아무런 문제가되지 않도록, 그러나 장치를 회전 시키면 UIBezierPath로 정의 된 애니메이션이 새로운 방향으로 업데이트되어야합니다. 애니메이션을 적용하는 동안 CAKeyframeAnimation 경로를 새 좌표계로 업데이트하는 방법을 찾고 있습니다.

+0

우리에게 보여줄 코드가 있습니까? – dfd

+0

그래서 사용자가 애니메이션을 회전 시켰기 때문에 애니메이션을 변경하는 _ 동안 애니메이션을 변경하고 싶다고 말하고 있습니까? – matt

+0

정확히! 좌표계가 변경되기 때문에 경로를 업데이트해야합니다. 나는 그것을하는 방법을 모르겠다. – Chris

답변

0

즉석에서 경로를 조정할 수는 없지만 원본 및 계산 된 눈금/번역의 지점을 기준으로 새 경로를 만들 수 있습니다.

당신이이 방법을 사용할 수있는 UIBezierPath에서 CGPoints의 배열을 활용하려면 다음, 애니메이션이 시작되면 장치 회전 https://stackoverflow.com/a/36374209/1491675

을 경로를 계산 애니메이션과 장치 회전에 현재 위치에 대한 참조를 유지하고 기존 애니메이션을 이미 생성 된 애니메이션 부분을 제외한 새로운 애니메이션으로 대체하십시오.

+0

왜 회전이 시작될 때 애니메이션이 멈추는지를 이해하지 못하고, 프리젠 테이션 레이어가 그 지점에있는 지점에 뷰를 남기지 않고 새로운 애니메이션으로 새 애니메이션을 시작하는 이유를 이해할 수 없습니다. 회전이 끝나면 경로가 종료됩니다. – matt

+0

위의 설명과 같은 의미입니까? "... 장치 회전에서 경로를 다시 계산하고 기존 애니메이션을 새 애니메이션으로 바꿉니다 ..." – Chris

+0

실제 코드를 표시하면 도움이 될 수 있습니다. – matt