2013-01-12 10 views
8

Tôi đang tạo lớp điều khiển điều hướng cho Mac OS X.Đẩy chuyển tiếp mà không phai

Tôi muốn thay thế chế độ xem hiện tại bằng hoạt ảnh kCATransitionPush.
Giống như trong bài viết này:
Core Animation Tutorial - Wizard Dialog With Transitions

Các CATransition được thiết lập như thế này:

CATransition *transition = [CATransition animation]; 
transition.type = kCATransitionPush; 
transition.subtype = kCATransitionFromLeft; 
[self.view setAnimations:@{ @"subviews" : transition }]; 

Tuy nhiên, khi tôi thay thế các quan điểm, có một hình ảnh động mờ dần, mà đang được tự động thêm.

[NSAnimationContext beginGrouping]; 
{ 
    [[self.view animator] replaceSubview:_currentViewController.view with:newViewController.view]; 
} 
[NSAnimationContext endGrouping]; 

Làm thế nào tôi có thể làm một hình ảnh động push mà không phai?

Trả lời

5

Cách tốt nhất mà tôi đã tìm thấy để có được hiệu ứng chuyển tiếp Animation Lõi mịn mà làm việc bất kể quan điểm hỗ trợ CA hay không là phải làm như sau:

  1. Tạo một hình ảnh về quan điểm bạn đang cố gắng động, sử dụng NSView -cacheDisplayInRect:toBitmapImageRep hoặc một phương pháp tương tự
  2. Đặt hình ảnh đó trong một NSImageView
  3. lớp phía sau xem hình ảnh, mà sẽ vẽ tốt mà không có trục trặc khi lớp hậu thuẫn
  4. Thêm xem hình ảnh như là một subview trên quan điểm cho rằng bạn đang cố gắng để chuyển
  5. Animate khung xem hình ảnh sử dụng NSView của phim hoạt hình Proxy
  6. Tháo xem hình ảnh khi hình ảnh động đã hoàn thành
1

Tôi nghi ngờ bạn đang chạy vào hoạt ảnh ngầm - Core Animation sẽ tự động tạo hoạt ảnh thay đổi thuộc tính lớp xảy ra bên ngoài giao dịch của riêng bạn.

Có một bản tóm tắt tốt của một số phương pháp để vô hiệu hóa các hình ảnh động ngầm trong hai câu hỏi sau:

How to disable CALayer implicit animations?

Disabling implicit animations in -[CALayer setNeedsDisplayInRect:]

... và bạn có thể đọc thêm về các giao dịch ngầm in the Core Animation docs

+1

Tôi không thực sự chắc chắn nếu tôi có được những gì bạn có ý nghĩa . Tôi đã thử nó với 'Chuyển đổi * chuyển đổi = [Hoạt ảnh chuyển tiếp]; [transition setValue: (id) kCFBooleanFalse forKey: kCATransitionFade]; 'nhưng nó không hoạt động, không có thông báo lỗi, chỉ là hành vi tương tự. – NSAddict

1

Tôi nghĩ rằng quá trình chuyển đổi từ chuyển đổi trái bao gồm một phai tích hợp. Các chuyển đổi push của iOS làm.

Nếu bạn không muốn điều đó, bạn có thể phải cuộn chuyển tiếp đẩy của riêng bạn bằng cách sử dụng Core Animation. Điều này sẽ dễ dàng trong iOS với hoạt ảnh UIView. Đáng buồn thay, không có một tương đương trong Mac OS. Tôi muốn Apple sẽ quay trở lại và thêm hoạt hình xem vào Mac OS. Tôi nhận được hư hỏng bằng cách sử dụng chúng trong iOS, và sau đó bỏ lỡ chúng khi tôi làm việc trên các ứng dụng Mac.