2012-05-03 4 views
2

CAKeyFrameAnimation 중에 경로를 따라 이동하는 동안 두 UIImageViews의 충돌을 감지 할 수 있습니까?CAKeyFrameAnimation 중 충돌 감지

그렇다면 애니메이션 동안 충돌에 대한 CGRect를 모두 확인하는 것을 포함하여 여러 가지 방법을 시도했지만 CAKeyFrameAnimation 중에 메서드를 수행하고 경로의 충돌을 감지하려고 시도 할 수 없습니다. 및 UIImageView.

답변

1

프리젠 테이션 레이어에서 속성을 가져와야합니다. 그것은 애니메이션 중에 존재하는 정보의 최선의 근사치를가집니다. 자세한 내용의 CALayer/표현 계층에 대한 설명서에

view.layer.presentationLayer 

봐하여 액세스 할 수 있습니다.

충돌을 확인하려면 각 객체의 presentationLayer를 가져온 다음 충돌을 테스트 할 속성에 액세스합니다. 정확한 검사 방법은 레이어의 유형과 간단한 hitTesting 또는 깊이 검사가 필요한지 여부에 따라 다릅니다. 당신은 당신이 찾고자하는 충돌 유형과시기를 알고 있습니다.

그러나 애니메이션을 적용하는 동안 객체의 속성에 액세스하려면 presentationLayer가 필요합니다.

당신은 당신이 원하는 때마다 이러한 검사를 할 수

편집 할 수 있습니다. 다른 작업의 컨텍스트에서 또는 NSTimer를 사용하여 일정 간격으로 수행 할 수 있습니다. CADisplayLink를 사용하여 애니메이션 타이머 자체에 연결할 수 있습니다.

CADisplayLink를 사용하는 경우 성능에 영향을 미치지 않도록 가능한 한 가장 높은 값으로 frameInterval을 설정하고 원하는대로하십시오.

timer = [CADisplayLink displayLinkWithTarget:self selector:@selector(checkForCollisions)]; 
    // Callback is for every frame, which is 60 times per second. 
    // Only callback every 6 frames (which is ten times per second) 
    timer.frameInterval = 6; 
    [timer addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 

완료되면 타이머를 무효화하는 것을 잊지 마십시오.

+0

확인을 위해이 코드를 어디에 추가합니까? –

+0

애니메이션이 진행되는 동안이 속성을 확인하고 싶습니다. 또는 애니메이션이 다음에 오는 경로가 UIImageView를 조회하는지 확인하십시오. –

+0

나는 이미 당신에게 말했습니다. 원할 때마다 중요한 속성을 확인하십시오.하지만 프레젠테이션 레이어에서 확인해야합니다. 애니메이션이 진행되는 동안 값을 추적하는 유일한 장소이기 때문입니다. –