2012-10-09 41 views
11

Theo như tôi biết thực hành đúng trên iOS 6 là viết mã như thế này để xử lý autorotation:Điểm của iOS 6 - (BOOL) là gì?

// iOS 6 
- (BOOL)shouldAutorotate { 
    return YES; 
} 

- (NSUInteger)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskPortrait; 
} 

Thay vì viết

// pre-iOS 6 support 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 
    BOOL retVal = UIInterfaceOrientationIsLandscape(toInterfaceOrientation); 
    return retVal; 
} 

Thành thật mà nói, tôi nghĩ rằng trước -iOS 6 rõ ràng hơn nhiều: Tôi không hiểu điểm có 2 phương pháp để xử lý autorotation, đặc biệt là vì tôi đã thấy -(BOOL) shouldAutorotate trả về YES trong tất cả các ví dụ. Tui bỏ lỡ điều gì vậy?

Trả lời

8

API mới cho phép bạn lưu một cuộc gọi để có được những hướng thiết bị hiện tại: hai câu hỏi, cụ thể là

  • hay không ứng dụng nên tự động xoay, không phụ thuộc vào định hướng mới, và
  • Định hướng mà thiết bị hỗ trợ

thường được trả lời tĩnh, mà không thực hiện cuộc gọi để kiểm tra hướng hiện tại. Các khoản tiết kiệm trở nên quan trọng hơn khi một màn hình có nhiều khung nhìn được điều khiển bởi các bộ điều khiển xem riêng biệt.

Vì iOS đang thực hiện cuộc gọi vào ứng dụng của bạn shouldAutorotate để phản hồi sự kiện từ gia tốc kế, nó đã biết định hướng mới; nếu ứng dụng của bạn trả lời 'CÓ`, iOS sau đó có thể kiểm tra hướng hiện tại dựa vào danh sách những người được hỗ trợ và đưa ra quyết định mà không cần ứng dụng của bạn truy vấn hướng hiện tại.

Trong trường hợp không chắc rằng ứng dụng của bạn cần phải quyết định xoay tự động dựa trên định hướng mới, API mới không tệ hơn phiên bản cũ, vì vậy đó là tình huống "thắng-rút".

+1

thực sự tệ hơn. UIInterfaceOrientationIsLandscape không cho tôi biết nếu giao diện trong chân dung hoặc chân dung lộn ngược. Và những gì chúng ta phải làm bây giờ khi chúng ta cần phải nói "Có, xoay nhưng chỉ khi bạn muốn xoay để chân dung"? Bây giờ tôi không thể kiểm tra 'toInterfaceOrientation' đối với UIInterfaceOrientationMaskPortrait vì nó không có trong 'shouldAutorotate' mới. – Indoor

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