CGOS에서 점 집합으로 CALayer에 선을 그린 iOS 용 애니메이션을 작성했습니다. 이 선은 평면 위치에서 다른 y 좌표로 '성형 된'모양으로 움직이지만 항상 동일한 x 좌표로 선 차트 애니메이션과 유사합니다.Core Animation (CABasicAnimation)에서 예기치 않은 동작이 발생했습니다.
포인트 보간을 쉽게하기 위해 CALayer 서브 클래스에 사용자 정의 CGFloat 속성을 추가했습니다. 이 속성을 '애니메이터'라고 부릅니다. (더 나은 이름은 진행, 보간 등이 될 수 있습니다.) 아이디어는 0.0f에서 1.0f까지이 속성에 간단한 CABasicAnimation을 추가하여 Core Animation의 타이밍 함수 및 보간 지원을 사용하는 동안 여전히 맞춤 애니메이션을 쉽게 작성할 수 있습니다. 예를 들어, 라인의 포인트가 y = 100에서 y = 130으로 이동하면 애니메이터가 0.0f 일 때 1.0f에서 점 130에있을 때 나는 100에 있으며 중간 값은 중간 점을 제공하고 이 새로운 포인트로 라인을 다시 그려 내 애니메이션을 얻으십시오.
이제 애니메이션이 잘 작동하고 레이어 작업을 비활성화하고 needsDisplayForKey 등을 추가했지만 내 문제는 Core Animation이 정확하지 않습니다. 애니메이터의 최종 가치는 1.0이 아닌 .95 .96 등입니다. 부동 소수점 숫자에는 정확성 문제가 있기 때문에 괜찮습니다. 그러나 모델 값이 업데이트되면 (애니메이션을 레이어에 추가하기 전에 1.0f로 설정) 선을 다시 그려야하고 정확한 시각적 정보를 얻어야합니다.
여기에 또 다른 문제가 발생합니다. 때때로 애니메이션이 즉시 제거되지 않습니다. 대부분의 경우 즉시 제거되며 아무런 문제가 없지만 때로는 몇 초 또는 몇 분 동안 유지되는 경우도 있습니다. 애니메이션이 제거되지 않는다는 내 이론을 테스트하기 위해 프리 레이어에있을 때 YES를 반환하는 내 레이어에 간단한 BOOL 플래그를 추가했으며 때로는 마지막 drawInContext 호출이 애니메이터 값이있는 프리젠 테이션 레이어에있는 것을 볼 수 있습니다. 0.98967f 또는 애니메이터 1.0f로 최종 drawInContext 호출을하고 표현 레이어 플래그를 NO로 설정하면 훨씬 늦게 발생합니다. 결과적으로 내 시각적 인 점프는 명백한 끔찍한 사용자 경험을 제외하고는 정확하지 않습니다.
내 테스트 프로젝트를 제공하게되어 기쁘게 생각하는 사람이라면 누구나 내 문제를 최대한 설명하려고 노력했다. 똑똑한 사람이 이것을보고 나를 도울 수 있기를 바랍니다.
편집 1 : Xcode 프로젝트 전체를 업로드했습니다 (불쾌한 편집을 포함하여 내가 시도한 모든 것을 보여줍니다) here.
편집 2 : 수동으로 http://lucas.tiz.ma/blog/2012/04/18/core-animation-is-a-bit-garbage-collection-y/
감사 완료에 애니메이션을 제거하는 유사한 문제를 가진 사람.
애니메이션 등의 코드를 우리에게 보여줄 수 있다면 도움이 될 것입니다. –
많은 드로잉 코드와 5 행 등을 만드는 컨트롤러 코드를 볼 수 있습니다. 어딘지 업로드하면 더 좋을까요? –
질문을 편집하고 프로젝트를 보관 용 계정에 업로드했습니다. –