6

Tôi có một NSButton có đáy là tuôn ra với superview của nó, và tôi muốn động nó di chuyển lên để đầu của nó là tuôn ra với superview của nó.Hoạt hình bằng cách thêm và xóa NSLayoutConstraints, thay vì điều chỉnh Constants

WWDC 2012 Phiên 228: Các phương pháp hay nhất để làm chủ bố cục tự động đề cập đến hai cách để tạo hiệu ứng thay đổi bố cục (31:16) và tôi đang cố gắng sử dụng kỹ thuật CoreAnimation. Ví dụ dưới đây thực hiện đúng cách di chuyển NSButton, nhưng nó làm như vậy ngay lập tức và không có hoạt ảnh.

[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] ; 

Tôi có thể thêm & xóa NSLayoutConstraints và để CoreAnimation tìm ra cách tạo hiệu ứng thay đổi? Điều đó có vẻ đơn giản hơn tôi xác định khoảng cách giữa vị trí cũ của nút cũ là &, sau đó điều chỉnh Hằng số của NSLayoutConstraint theo số lượng đó.

Trả lời

7

Sau khi thêm button.superview.wantsLayer = YES, ví dụ trên sẽ hoạt ảnh chính xác.

Các vấn đề liên quan