2012-10-04 20 views
6

Tôi muốn hỗ trợ xoay vòng iOS 6. Rắc rối là, tôi đã xem xét rất nhiều tài liệu và các câu hỏi tràn ngăn xếp nhưng chưa tìm thấy bất kỳ giải pháp nào thậm chí có chiều sâu. Tôi chỉ thấy rằng tôi nên thêm hai phương thức này để xem các lớp điều khiển của tôi - tuy nhiên, nếu tôi không nhầm, họ không hoạt động theo cách tương tự như iOS trước 6 phương pháp:iOS 6 Xoay: Đẩy Trình điều khiển Chế độ xem

- (BOOL)shouldAutorotate 
{ 
    return YES; 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskAll; // use what is appropriate for you. 
} 

My ứng dụng hiện đang quay trước iOS6 bằng cách sử dụng mã sau. Lưu ý rằng tôi sử dụng các tham số định hướng giao diện để xác định có hay không tôi sẽ đẩy Trình điều khiển xem của tôi. Làm cách nào để triển khai điều này trong các đại biểu xoay vòng iOS 6?

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { 
    UIInterfaceOrientation toOrientation = self.interfaceOrientation; 

    if (self.tabBarController.view.subviews.count >= 2) 
    { 
     UIView *tabBar = [self.tabBarController.view.subviews objectAtIndex:1]; 

     if(toOrientation != UIInterfaceOrientationLandscapeLeft && toOrientation != UIInterfaceOrientationLandscapeRight) 
     { 
      CUSTOM_DEBUG_LOG("\n\nRotated back to Portrait"); 
      tabBar.hidden = FALSE; 
     } 
    } 
} 

- (void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration 
{ 
    if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight) 
    { 
     CUSTOM_DEBUG_LOG("\nView going landscape"); 
     ScrollViewController *s = [[ScrollViewController alloc] initWithNibName:@"ScrollViewController" bundle:nil]; 
     [self.navigationController pushViewController:s animated:NO]; 
     [s release]; 
     self.tabBarController.tabBar.hidden = YES; 
     self.navigationController.navigationBar.hidden = YES; 
    } 

} 
+1

Xem WWDC 2012 phim về bộ điều khiển chế độ xem. – matt

+0

Tôi nghĩ rằng tôi đã không cụm từ đúng câu hỏi của tôi, bởi vì ứng dụng của tôi đang làm việc mà không có bất kỳ câu trả lời ở đây. Về cơ bản tôi đã không thể xoay vòng được trong iOS và tôi nghĩ rằng các hàm willAnimate ... cũng không được chấp nhận nữa. Hóa ra, họ không. Vì vậy, ứng dụng của tôi vẫn hoạt động. Hoan hô? Thật không may, tôi có các thanh màu trắng khó coi khổng lồ trên trang của tôi mà tôi cần phải loại bỏ. Đã đến lúc đăng câu hỏi khác. –

Trả lời

3

Thanh toán thisthis SO thảo luận.

[EDIT]

Có các phương pháp bạn đã đề cập không được chấp nhận trong iOS 6.0 và chúng sẽ tiếp tục hoạt động. Nó chỉ là cách các công trình xoay tự động đã được thay đổi. Cho đến nay nó đã được xem bộ điều khiển trách nhiệm để quyết định xem họ xoay hay không nhưng bây giờ RootViewController sẽ quyết định xem con cái của họ nên xoay hay không. Nếu bạn không có thiết lập rootviewcontroller thì bạn phải thêm nó vào cửa sổ và sau đó đặt các phương thức shouldAutoRotate và supportedInterfaceOrientations trong rootviewcontroller.

+0

Nếu tôi không nhầm, có vẻ như nó chỉ di chuyển mã ra khỏi hàm willAnimate của tôi vào một hàm khác, trông đẹp hơn nhưng không có chức năng gì hơn. –

+0

Xin lỗi tôi đã hiểu nhầm câu hỏi của bạn. Đã chỉnh sửa câu trả lời của tôi. – applefreak

+0

Tôi sẽ lấy nó! Cảm ơn :) –

3

Lần Chánh tại xử lý luân chuyển trong iOS 6. Subclass điều khiển nav của bạn và thêm một bool

- (BOOL)shouldAutorotate { 
    return YES; 
} 

- (NSUInteger)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskPortrait; // your rotation here 
} 
+0

Tôi không chắc mình khá hiểu. Bạn có thể cho tôi một đoạn mã mẫu hoặc chỉ cho tôi cách tôi xử lý việc đẩy bộ điều khiển chế độ xem của tôi không? Bạn có nghĩa đen chỉ cần dán trở lại khối đầu tiên của mã (với một sự trở lại hơi khác nhau) với tôi và điều đó không giúp tôi cả. Tôi nên đề cập rằng lý do tôi đang đẩy bộ điều khiển chế độ xem riêng cho chế độ ngang là vì giao diện người dùng ngang hoàn toàn khác với hình chân dung. –

+1

Bạn có thể muốn xem xét viết lại mã đó để bạn chỉ cần thay đổi bố cục khi xoay. Nếu giao diện người dùng khác nhau có cùng các thành phần sẽ đơn giản.Nếu có các thành phần khác nhau, thì bạn có thể hiển thị/ẩn một cách thích hợp. Nếu bạn thực sự muốn giữ các bộ điều khiển xem riêng biệt, thì có lẽ nó sẽ hoạt động tốt nhất nếu có một bộ điều khiển xem cha mẹ thêm/xóa và/hoặc hiển thị/giấu bộ điều khiển xem con thích hợp trên một vòng quay ... theo cách đó bạn không phải đối phó với chức năng cảnh hậu trường của bộ điều khiển đẩy/popping xem trên một vòng quay. – Matt

+0

Đang đẩy/popping không hiệu quả hoặc một cái gì đó rất không mong muốn? Ứng dụng này rất giống với ứng dụng nghe nhạc của iPhone, nơi bạn nghiêng nghiêng trên bất kỳ bộ điều khiển chế độ xem của thanh tabbar nào (vâng, ứng dụng của tôi có thanh tab), bạn sẽ bị ném vào tràn. Đối với ứng dụng của tôi, bạn bị ném vào bộ điều khiển chế độ xem ngang của tôi. Dường như nó hoạt động tốt cho iOS 5 trở xuống nhưng tôi đang cố gắng tìm ra những thứ cho iOS 6. Tôi cũng _must_ duy trì khả năng tương thích với các phiên bản iOS cũ hơn. –

1

Tôi có thể chưa triển khai mã xoay vòng iOS6 chính xác khi tôi đăng câu hỏi lần đầu tiên.

Tôi đã nghĩ sai rằng hàm willAnimateRotationToInterfaceOrientation không được chấp nhận trong iOS6, khiến tôi tin rằng có một đại diện xoay vòng iOS mới với thông số định hướng. Hóa ra đây không phải là trường hợp, vì vậy loại ứng dụng của tôi hoạt động.

Code tôi cắm vào ứng dụng của tôi là chỉ này:

- (BOOL)shouldAutorotate 
{ 
    return YES; 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight); 
} 
+0

+1 cho khả năng "sao chép và dán". Không cảm thấy như đang tìm kiếm cú pháp định hướng mặt nạ hợp nhất ... –

+2

Giá trị tiện lợi UIInterfaceOrientationMaskAllButUpsideDown thậm chí còn dễ đọc hơn. – eclux

1

Nếu bạn đang sử dụng một UINavigationController, ghi đè shouldAutomaticallyForwardRotationMethods = YES tài sản.

Sau đó, giống như Mark S cho biết, cũng ghi đè shouldAutorotatesupportedInterfaceOrientations cho trẻ em VC.

+0

Rất tuyệt! Nắm bắt tốt. Tôi sẽ cung cấp cho bạn một thuyền cao su (: –