2009-01-09 22 views
38

Trong ứng dụng iPhone của tôi, tôi đã đặt UIBarBUtton loại UIBarButtonSystemItemTrash vào UIToolBar của tôi. Khi nhấn, tôi muốn nhân rộng hoạt hình của Mail.app: thùng mở ra, UIView gập và bay vào nó.
Có cách nào để truy cập hoạt ảnh này qua iPhone SDK không?Làm thế nào tôi có thể sao chép hoạt ảnh rình rập của Mail.app

Hiện tại tôi đang sử dụng hoạt ảnh tùy chỉnh, nhưng có một số giới hạn; ví dụ, tôi không thể tạo hiệu ứng cho chính bin. Bạn có gợi ý nào không? Mã mẫu?

Chúc mừng,
Davide

+8

Vì vậy, folks: Làm thế nào để làm điều đó mà không cần API tư nhân? – dontWatchMyProfile

+0

Hi nutsmuggler nếu tôi đang thử hình động tương tự, tôi không hiểu cách gập đường cong trong khi di chuyển ...... nếu có thể cho biết làm thế nào để làm điều đó –

+3

@jeeva haha ​​i như thế nào tình cờ bạn đề cập đến tên của mình –

Trả lời

34

Sử dụng loại suckEffect trên hoạt ảnh. Ngoài ra: spewEffect, genieEffect, unGenieEffect, twist, tubey, swirl, cameraIris, cameraIrisHollowClose, cameraIrisHollowOpen, rippleEffect, charminUltra, zoomyIn và zoomyOut. Không hoạt động trong trình mô phỏng.

CATransition *animation = [CATransition animation]; 
animation.type = @"suckEffect"; 
animation.duration = 2.0f; 
animation.timingFunction = UIViewAnimationCurveEaseInOut; 
view.opacity = 1.0f; 
[view.layer addAnimation:animation forKey:@"transitionViewAnimation"]; 

Lưu ý: Đoạn mã được lấy từ một cơ sở mã lớn hơn. Tôi hy vọng nó hoạt động :)

+15

Điều này đang sử dụng API riêng tư. Đừng ngạc nhiên nếu Apple từ chối ứng dụng của bạn để bao gồm những hiệu ứng đó, và đặc biệt đừng ngạc nhiên nếu ứng dụng của bạn bắt đầu hoạt động lạ sau khi cập nhật hệ điều hành. Tôi khuyên bạn nên tránh xa điều này. –

+0

Yup, đó là một API riêng tư và hoàn toàn không được hỗ trợ. Dự phòng cho các loại hoạt hình không xác định là một hiệu ứng mờ dần mặc dù vậy nó an toàn để sử dụng cho phát triển toolchain trong nhà hoặc mở. Sự chấp thuận của App Store là một túi hỗn hợp liên quan đến các API riêng tư nhưng tôi nghi ngờ họ sẽ từ chối việc sử dụng này. – rpetrich

+0

bạn không bao giờ biết ứng dụng nào Apple có thể từ chối và tại sao! Tại sao, họ cũng cho phép một số công ty lớn sử dụng các API riêng tư! – lostInTransit

10

Thật không may, tôi nghĩ rằng điều này sẽ cần phải là một phim hoạt hình hoàn toàn tùy chỉnh. Các UIView gấp có thể được xấp xỉ bằng cách sử dụng Core Animation, có lẽ bằng cách thêm quan điểm cho CATransform3D của lớp cơ bản của UIView để bóp méo UIView thành một hình thang được hút vào thùng rác.

Theo như thùng rác, bạn có thể tạo UIBarButtonItem bằng initWithCustomView :, có thể cho phép bạn chèn UIView tùy chỉnh có thùng rác hoạt hình. Có vẻ như thùng rác có thể có hai phần tử, đế có thể và nắp, được xoay độc lập để mở và đóng hộp. Vẽ PNG cho cả hai, tạo UIImageViews cho chúng và làm cho chúng trở thành subviews của chế độ xem tùy chỉnh UIBarButtonItem. Để mở và đóng, áp dụng các phép biến đổi quay cho chúng để tạo hiệu ứng cho các bản xem trước.

+1

Tôi sợ tôi nhận được câu trả lời này :) Một điều tôi lo lắng là sao chép các ứng dụng của Apple beahviour quá chặt chẽ người ta có thể khiến ứng dụng của anh ấy bị từ chối do cáo buộc sử dụng API riêng tư. Ngoài ra, tôi không phải là confortable grabbing bin của Apple và chỉnh sửa nó, nhưng có lẽ tôi chỉ là một con mèo đáng sợ. – nutsmuggler

+4

Bạn không có gì phải lo sợ nếu bạn đang tạo việc triển khai của riêng mình từ các giao diện đã xuất bản. Bạn có thể bị từ chối ban đầu, nhưng họ sẽ lắng nghe phản hồi của bạn và cuối cùng chấp thuận nó. Thành thật mà nói, các báo cáo về hoàn toàn từ chối là cách thổi phồng. –

+1

Đó là sự thật (có thể là một phản ứng rất muộn) .. hầu hết các ứng dụng kết thúc trong cửa hàng một cách này hay cách khác. – Jake

11

Chỉ cần thêm một số thông tin:

  1. Bạn có thể sử dụng "suckEffect" với tiêu chuẩn +[UIView setAnimationTransition:forView:cache:]. Chỉ cần chuyển số 103 sang biến số hoạt hìnhTransition. Điều này sẽ không tránh ứng dụng của bạn bị Apple từ chối mặc dù: p
  2. "spewEffect", "genieEffect", "unGenieEffect", v.v. không còn tồn tại trên iPhoneOS 3.x. Việc chuyển đổi không có giấy tờ duy nhất còn lại là "khối lập phương" (-), "rippleEffect" (110), ba "cameraIris" hiệu ứng (105,106,107) và "suckEffect" (103).

Xem chi tiết http://www.iphonedevwiki.net/index.php?title=UIViewAnimationState.

Ngoài ra, để tạo hoạt ảnh cho thùng (với API riêng): http://www.iphonedevwiki.net/index.php?title=UIToolbar#Animating_the_trash_can_icon.

+0

Cảm ơn, đề xuất rất hay! – nutsmuggler

4

Tôi không chắc đây có phải là câu trả lời hay không nhưng here là lib thực hiện "hiệu ứng genie" vì vậy nó khá giống với những gì bạn muốn đạt được.

CGRect endRect = CGRectMake(30, 40, 50, 60); 
[view genieInTransitionWithDuration:0.7 
        destinationRect:endRect 
        destinationEdge:BCRectEdgeTop 
         completion:^{ 
          NSLog(@"I'm done!"); 
          }]; 

Genie IN

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