6

NSButton의 밑바닥이 수퍼 뷰와 동일 평면에 있고 최상부가 수퍼 뷰와 동일하도록 움직이는 애니메이션을 만들고 싶습니다.상수를 조정하는 대신 NSLayoutConstraints를 추가 및 제거하여 애니메이션 적용

WWDC 2012 세션 228 : 자동 레이아웃 마스터 링을위한 모범 사례에서는 레이아웃 변경 (31:16)에 애니메이션을 적용하는 두 가지 방법에 대해 언급하고 있으며 CoreAnimation 기술을 사용하려고합니다. 아래의 예제는 NSButton을 올바르게 움직이지만 애니메이션을 사용하지 않고 즉각적으로 수행합니다.

[button.superview removeConstraint:pointerToBottomSpaceConstraint] ; 
NSArray* topSpaceConstraintArray = [NSLayoutConstraint constraintsWithVisualFormat: @"V:|[button]" 
                      options: 0 
                      metrics: nil 
                      views: NSDictionaryOfVariableBindings(button)] ; 
[button.superview addConstraints:topSpaceConstraintArray] ; 
[NSAnimationContext runAnimationGroup:^(NSAnimationContext* context) { 
    context.duration = 2 ; 
    context.allowsImplicitAnimation = YES ; 
    [button.superview layoutSubtreeIfNeeded] ; 
} completionHandler:nil] ; 

나는 &는 NSLayoutConstraints을 제거 추가 코어 애니메이션은 변화를 애니메이션하는 방법을 알아낼 수 있도록 할 수 있습니까? 버튼의 이전 & 새 위치 사이의 거리를 결정한 다음 NSLayoutConstraint의 상수를 해당 양만큼 조정하는 것보다 간단합니다.

답변

7

button.superview.wantsLayer = YES을 추가 한 후 위 예의 애니메이션이 올바르게 적용됩니다.

관련 문제