2008-09-22 4 views
3

내 윈도우의 크기에 따라 두 개의 레이아웃 중 하나에 넣는 NSView가 있습니다.resizeSubviewsWithOldSize 호출 중에 애니메이터 프록시에서 Core Animation을 트리거하는 방법은 무엇입니까?

관련 superview가 resizeSubviewsWithOldSize 메소드를 수신하면 레이아웃을 조정합니다.

이 방법이 효과적이지만 변경 사항을 적용하고 싶습니다. 그래서 자연스럽게 새로운 프레임을 설정할 때 애니메이터 프록시 호출을 시도했지만 사용자가 여전히 드래그하는 동안 애니메이션이 실행되지 않습니다. 애니메이션이 끝나기 전에 마우스를 놓으면 애니메이션의 끝 부분을 볼 수 있지만 그때까지는 아무것도 볼 수 없습니다. kCATransactionDisableActions가 NO로 설정되었는지 확인하려고 시도했지만 도움이되지 않았습니다.

새 애니메이션을 시작하고 실제로 크기를 조정하는 동안 애니메이션을 실행할 수 있습니까?

답변

2

CA의 애니메이션이 타이머를 통해 실행되고 사용자가 드래그하는 동안 활성화 된 런 루프 모드 중에 타이머가 실행되지 않기 때문에이 작업을 쉽게 수행 할 수 있다고 생각하지 않습니다.

사용자가 드래그하는 동안 runloop을 제어 할 수 있다면 runloop 모드로 놀 수 있습니다. 그게 효과가있을거야. 나는 당신이 CA 측에서 그것을 바꿀 수 있다고 생각하지 않습니다.

0

이것은 실제로 대답이 아니지만 드래그하여 창 크기를 조정하는 동안 아무 것도 움직이지 않도록하는 것이 좋습니다. 화면이 이미 움직이고 있습니다 (창 이동에서) - 추가 애니메이션은 시각적으로 혼란스럽고 불필요 할 것입니다.

CoreAnimation 효과는 알려진 한 상태에서 다른 상태로 이동하는 데 가장 적합합니다. 예를 들어, 기본 설정 창의 크기를 조정하여 새 창 내용을 표시하고 이전 크기와 새 크기를 모두 알거나 객체를 넣거나 빼내십시오 (또는 둘 다). 윈도우 크기가 조정되는 동안 애니메이션을하는 것은 시각적으로 혼란스러워서 사용자가 원하는 크기의 윈도우를 만드는 데 집중하는 것을 어렵게 만듭니다.

+0

정당하게 생각하면 이러한 의견은 제 상황에는 적용되지 않습니다. 나는 두 개의 알려진 주 사이를 이동 중입니다. 사용 가능한 공간에 따라 두 가지 간단한 레이아웃 옵션. 상호 작용은 하나에서 다른 것으로 "뛰어 넘기"만하면 좋지만 움직일 수있는 경우 덜 거슬 릴 것입니다. –

+0

NSCollectionView는이 작업을 수행하므로 가치가 있습니다 (IconCollection 샘플 코드에서 작동 함). 그들은 분명히 끌기를 멈춘 "조용한 기간"을 기다립니다. 비슷한 클래스를 작성하려고 시도했지만 크기를 조정하는 동안 애니메이션을 일관되고 적절하게 실행하는 것은 매우 어렵습니다. –

관련 문제