2013-02-09 35 views
5

Tôi đang cố gắng tạo lại hành vi iTunes 11 của các giao diện điều hướng trong một cửa sổ bật lên. Tôi dường như không thể tìm cách để làm cho hoạt hình của tôi xảy ra cùng lúc với sự thay đổi của cửa sổ bật lên là contentSize.Thay đổi Bố cục Tự động Hoạt ảnh đồng thời với nội dung NSPopoverSize change

Thiết lập cơ bản tôi có là lớp con xem tùy chỉnh MyPopoverNavigationView với hai bản xem trước: chế độ xem cũ và mới mà tôi muốn cửa sổ bật lên điều hướng giữa. Pop2's contentViewController có một cá thể MyPopoverNavigationView là view. Tôi thực hiện điều này:

// Configure constraints how I want them to show the new popover view 
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *ctx) { 
    [ctx setDuration:0.25]; 
    [ctx setAllowsImplicitAnimation:YES]; 
    [self layoutSubtreeIfNeeded]; 
} completionHandler:nil]; 

Theo như tôi có thể nói từ các video AutoDC WWDC 2012, đây là cách được khuyến nghị để tạo các thay đổi cho khung của khung nhìn do thay đổi ràng buộc. Nó hoạt động, nhưng các hình ảnh động xảy ra trong hai giai đoạn:

  • Thứ nhất, của popover contentSize sẽ thay đổi để thích ứng với quan điểm mới mà tôi đang di chuyển đến (trước mà xem trở nên rõ ràng, vì vậy nó che khuất một phần hiện tại Nội dung).
  • Thứ hai, các chế độ xem có hiệu lực như tôi mong đợi, do đó hệ thống ràng buộc mà tôi đã cài đặt được thỏa mãn.

Từ thiết lập một số breakpoint, nó trông giống như -layoutSubtreeIfNeeded cuối cùng gọi một phương thức riêng trên popover gọi _fromConstraintsSetWindowFrame:, mà hiện các hoạt hình kích thước popover bên ngoài nhóm hoạt hình của tôi. Thời gian của bối cảnh của tôi không được tôn trọng và hoạt ảnh của tôi không xảy ra cho đến khi thay đổi kích thước của cửa sổ bật lên hoàn tất.

Làm cách nào để có thể khiến cho các lượt xem của tôi hoạt ảnh cùng với thay đổi kích thước của cửa sổ bật lên?

Trả lời

4

Hóa ra mẹo là đặt rõ ràng thuộc tính contentSize của cửa sổ bật ra bên ngoài của khối hoạt ảnh và khối hoàn thành. Đoạn có liên quan từ sample GitHub project tôi đặt lại với nhau để tìm ra nó trông giống như:

// Configure constraints for post-navigation view layout 
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *ctx) { 
    [ctx setDuration:0.25]; 
    [ctx setAllowsImplicitAnimation:YES]; 
    [self layoutSubtreeIfNeeded]; 
} completionHandler:^{ 
    // Tear down some leftover constraints from before the transition 
}]; 

// Explicitly set popover's contentSize so its animation happens simultaneously 
containingPopover.contentSize = postTransitionView.frame.size; 
+1

không làm việc cho tôi trên Yosemite –

0

này hoạt động tốt đối với tôi trên Sierra:

let deltaHeight = 8 
let contentSize = popover.contentSize 
NSAnimationContext.runAnimationGroup({ (context) -> Void in 
    context.allowsImplicitAnimation = true 
    popover.contentSize = NSSize(width: contentSize.width, height: contentSize.height+deltaHeight) 
}) 
Các vấn đề liên quan