2013-05-02 24 views
15

Vì vậy, tôi đang phát triển một ứng dụng iPad chỉ hỗ trợ chế độ ngang ngoại trừ trên một bộ điều khiển chế độ xem. Vấn đề tôi gặp phải là khi tôi trình bày giao diện phương thức và thay đổi hướng sang dọc sau đó loại bỏ chế độ xem, chế độ xem gốc (chỉ hỗ trợ cảnh quan) ở chế độ dọc cho đến khi tôi xoay thiết bị mà sau đó quay trở lại cảnh quan và ở lại như vậy. Tôi đã đánh bại bản thân mình cố gắng tìm ra cách giữ cho cha mẹ xem định hướng ban đầu nhưng không thể tìm ra giải pháp.Duy trì định hướng của chế độ xem gốc sau khi chế độ xem phương thức được trình bày theo các hướng khác nhau

Tôi có đoạn code sau trong đại biểu ứng dụng của tôi để cho phép định hướng thay đổi trên chỉ rằng quan điểm đơn phương thức (GalleryPhotoViewer):

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{ 
NSUInteger orientations = UIInterfaceOrientationMaskAllButUpsideDown; 

    if(self.window.rootViewController){ 
     UIViewController *presentedViewController = [[(UINavigationController *)self.window.rootViewController viewControllers] lastObject]; 

     //Support Portrait mode only on Photoviewer 
     if ([[presentedViewController presentedViewController] isKindOfClass:GalleryPhotoViewController.class]) { 
      orientations = UIInterfaceOrientationMaskAll; 
     }else{ 
      orientations = [presentedViewController supportedInterfaceOrientations]; 

     } 
    } 

    return orientations; 
} 

Từ tầng lớp phụ huynh (PhotosViewController) Tôi gọi:

GalleryPhotoViewController *gpView = [GalleryPhotoViewController new]; 
[self presentViewController:gpView animated:YES completion:nil]; 

Cũng trong bố mẹ tôi (và các chế độ xem khác), tôi có mã sau để không cho phép chế độ dọc:

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

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    if(interfaceOrientation == UIInterfaceOrientationPortrait) { 
     return YES; 
    } else { 
     return NO; 
    } 
} 

Bất kỳ ý tưởng nào về cách tôi có thể giữ định hướng trên chế độ xem gốc của tôi? Tôi đã suy nghĩ về việc có thể thay đổi định hướng theo hướng cha mẹ trong phương thức viewWillAppear khi phương thức bị loại bỏ nhưng sau đó tôi sẽ không biết định hướng trước đó là gì, chưa kể tôi chưa tìm được mã để làm điều này bất kể ios6.

CHỈNH SỬA/GIẢI PHÁP: Vì vậy, tôi đã tìm thấy một giải pháp và những gì tôi đã kết thúc làm là rời khỏi ứng dụng: supportedInterfaceOrientationsForWindow: mã và chỉ thêm lớp con UINavigation vào chế độ xem cha mẹ đã trình bày chế độ xem và mọi thứ hoạt động như mong đợi và cha mẹ giữ lại định hướng ban đầu của nó trong khi phương thức có thể thay đổi một cách tự do.

Trong mẹ tôi:

//To make sure that this view remains in Landscape 
@implementation UINavigationController (Rotation_IOS6) 

-(BOOL)shouldAutorotate 
{ 
    return [[self.viewControllers lastObject] shouldAutorotate]; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return [[self.viewControllers lastObject] supportedInterfaceOrientations]; 
} 

@end 

Cảm ơn @ Matt những lời đề nghị.

Trả lời

11

Tôi nghĩ vấn đề là việc bạn sử dụng application:supportedInterfaceOrientationsForWindow:. Thay vào đó, hãy loại bỏ điều đó và bắt đầu với một lớp con UINavigationController và làm cho lớp của trình điều khiển chế độ xem gốc là giao diện điều hướng của bạn. Sau đó:

  • Trong lớp con UINavigationController, trở UIInterfaceOrientationMaskLandscape từ supportedInterfaceOrientations.

  • Trong bộ điều khiển chế độ xem (phương thức) đã trình bày, trả lại UIInterfaceOrientationMaskAll từ supportedInterfaceOrientations.

+0

Vì vậy, tôi đã tìm thấy giải pháp và những gì tôi đã làm cuối cùng là rời khỏi ứng dụng: supportedInterfaceOrientationsForWindow: mã và chỉ thêm lớp con UINavigation vào chế độ xem cha mẹ đang trình bày chế độ xem và mọi thứ hoạt động. Cảm ơn đã giúp đỡ. – shokaveli

+0

Nếu tôi giúp, bạn có thể chấp nhận câu trả lời của tôi, có lẽ? Tôi nghĩ * câu trả lời của tôi đưa ra phân tích chính xác, cụ thể là việc bạn sử dụng 'application: supportedInterfaceOrientationsForWindow:' đã làm rối tung mọi thứ, và bạn nên sử dụng 'supportedInterfaceOrientations' của UINavigationController so với' supportedInterfaceOrientations' của bộ điều khiển dạng xem. – matt

+1

@matt: Tôi đặt ở trên bạn nói nhưng tôi vẫn nhận được ảnh chân dung trong khi loại bỏ trình điều khiển chế độ xem. Tôi cần phải đặt gì ở chế độ xem gốc – TamilKing

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