resizeSubviewsWithOldSize를 호출하는 동안 애니메이터 프록시에서 Core Animation을 어떻게 트리거할 수 있나요?

StackOverflow https://stackoverflow.com/questions/114970

  •  02-07-2019
  •  | 
  •  

문제

내 창 크기에 따라 두 가지 레이아웃 중 하나에 배치할 NSView가 있습니다.

관련 슈퍼뷰가 resizeSubviewsWithOldSize 메소드를 수신하면 레이아웃을 조정하고 있습니다.

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

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

도움이 되었습니까?

해결책

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

사용자가 드래그하는 동안 런루프를 제어할 수 있다면 런루프 모드를 가지고 놀아보세요.그러면 효과가 있을 것입니다.CA 측에서는 변경할 수 없다고 생각합니다.

다른 팁

이것은 실제로 대답은 아니지만 창 크기를 조정하기 위해 드래그하는 동안 애니메이션을 적용하지 않는 것이 좋습니다.화면은 이미 애니메이션 중입니다(창 이동에서). 추가 애니메이션은 시각적으로 혼란스럽고 관련성이 없을 수 있습니다.

CoreAnimation 효과는 하나의 알려진 상태에서 다른 상태로 이동하는 데 가장 적합합니다. 예를 들어 기본 설정 창의 크기가 새 창의 내용에 맞게 조정되고 이전 크기와 새 크기를 모두 알고 있거나 개체를 페이드 인 또는 페이드 아웃하는 경우입니다. (아니면 둘다).창 크기가 조정되는 동안 애니메이션을 수행하면 시각적으로 혼란스럽고 사용자가 원하는 창 크기를 얻는 데 집중하기가 더 어려워집니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top