2014-10-11 17 views
15

Chạy trên iOS 8, tôi cần thay đổi giao diện người dùng khi xoay ứng dụng của mình.Phát hiện thay đổi định hướng iOS 8

Hiện nay tôi đang sử dụng mã này:

-(BOOL)shouldAutorotate 
{ 
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; 
    if (orientation != UIInterfaceOrientationUnknown) [self resetTabBar]; 

    return YES; 
} 

Những gì tôi làm điều đó loại bỏ các giao diện người dùng hiện tại và thêm một giao diện người dùng mới phù hợp với định hướng. Tuy nhiên, vấn đề của tôi là phương pháp này được gọi là khoảng 4 lần mỗi lần quay đơn được thực hiện.

Cách chính xác để thực hiện thay đổi khi thay đổi hướng trong iOS 8 là gì?

+6

Tại sao bạn sử dụng phương pháp này để thay đổi giao diện? Tôi nghĩ rằng nó chỉ là để trả lời câu hỏi wheter để xoay hay không. Sử dụng 'willRotateToInterfaceOrientation: duration:' cho iOS 7- và 'viewWillTransitionToSize: withTransitionCoordinator:' cho iOS 8. –

+0

Chỉ cần hỏi một câu hỏi, mọi người cố gắng giúp đỡ nhưng không bận tâm chấp nhận câu trả lời hoặc nhận xét bất kỳ chi tiết nào. Xin lỗi nhưng điều đó không hay. – bisma

Trả lời

25

Timur Kuchkarov là chính xác, nhưng tôi sẽ đăng câu trả lời vì tôi đã bỏ lỡ nhận xét của anh ấy lần đầu tiên tôi kiểm tra trang này.

Các iOS 8 phương pháp phát hiện sự thay đổi định hướng (xoay) đang triển khai các phương pháp sau đây của bộ điều khiển xem:

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator 
{ 
    // Do view manipulation here. 
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; 
} 

Lưu ý: Quan điểm của người điều khiển đã chưa chuyển với kích thước đó tại thời điểm này, vì vậy hãy cẩn thận nếu mã kích thước của bạn dựa trên thứ nguyên hiện tại của chế độ xem.

+0

Ngoài ra, tôi chỉ nhận thấy các chi tiết tốt hơn về cách sử dụng 'điều phối viên' trong [câu trả lời này] (http://stackoverflow.com/a/24072010/1057616). – cloudrave

+4

Vì phương pháp này được gọi khi chế độ xem chưa chuyển sang kích thước mới, phương thức nào được gọi sau khi chế độ xem đã chuyển sang kích thước mới? – VinceFior

+1

Bạn nên chỉ ra rằng phương pháp này KHÔNG kích hoạt mỗi khi có thay đổi xoay vòng. Nó chỉ cháy trong những hoàn cảnh cụ thể của một vòng quay. Tôi sử dụng phương pháp này trong mã của tôi, và tùy thuộc vào giao diện hiển thị, đôi khi nó cháy, đôi khi nó không, đó là lý do tại sao tôi cũng phải bao gồm viewWillLayoutSubviews để xử lý tất cả các trường hợp. –

17

Phương thức viewWillTransitionToSize:withTransitionCoordinator: được gọi ngay trước khi chế độ xem đã chuyển sang kích thước mới, như Nick chỉ ra. Tuy nhiên, cách tốt nhất để chạy mã ngay lập tức sau quan điểm đã chuyển sang kích thước mới là sử dụng một khối hoàn thành vào phương pháp:

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { 
    [coordinator animateAlongsideTransition:nil completion:^(id<UIViewControllerTransitionCoordinatorContext> context) { 
     // your code here 
    }]; 
} 

Nhờ this answer cho mã và Nick để liên kết tới nó trong bình luận của anh ấy.

+0

Cách xác định liệu bản dịch có được hoàn thành không? – Satyam

+0

@Satyam Khối hoàn thành được biểu thị bằng chú thích '// mã của bạn ở đây' sẽ chạy ngay sau khi quá trình chuyển đổi hoàn tất. – VinceFior

+0

Bạn nên đã chỉ ra rằng phương pháp này không cháy mỗi khi có một sự thay đổi luân phiên. Nó chỉ cháy trong những hoàn cảnh cụ thể của một vòng quay. Tôi sử dụng phương pháp này trong mã của tôi, và tùy thuộc vào giao diện hiển thị, đôi khi nó cháy, đôi khi nó không, đó là lý do tại sao tôi cũng phải bao gồm viewWillLayoutSubviews để xử lý tất cả các trường hợp. –

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