9

Tôi đã xem xét một số câu trả lời cho các câu hỏi tương tự nhưng không có câu trả lời nào hoạt động. Tôi có một ứng dụng mà tôi cần tất cả mọi thứ portait ngoại trừ một người xem ảnh tôi có. Trong phần định hướng được hỗ trợ của menu mục tiêu, tôi chỉ có hình chân dung. Làm cách nào để bắt buộc một chế độ xem của tôi trở nên phong cảnh. Nó đang được đẩy lên ngăn xếp từ bộ điều khiển nav nhưng tôi đang sử dụng bảng phân cảnh để kiểm soát tất cả điều đó.Cảnh quan lực cho một bộ điều khiển chế độ xem ios

+0

'shouldAutoRotate', '[[UIApplication sharedApplication] setStatusBarOrientation: UIInterfaceOrientationLandscapeRight];', nada –

+0

được bạn nhắm mục tiêu Phiên bản nào của iOS? –

+0

Xin lỗi iOS 6 ... Tôi đã thử điều này: http: // stackoverflow.com/questions/14633213/force-portrait-orientation-while-đẩy-từ-landscape-view-controller' –

Trả lời

2

Có điều này là có thể, bạn có thể sử dụng mã này:

-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { 
     return UIInterfaceOrientationMaskLandscape; 
    } 

    -(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orientation { 
     return orientation==UIInterfaceOrientationMaskLandscape; 
    } 

HOẶC

Hãy thử phương pháp này trong đại biểu ứng dụng của bạn

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { 
    if (sglobalorientation isEqualToString:@"AllOrientation"]) { 
     return UIInterfaceOrientationMaskLandscape; 
    } else { 
     return UIInterfaceOrientationMaskAll; 
    } 
} 

bạn cần phải thay đổi sglobalorientation giá trị biến giá trị chuỗi AllOrientation trước khi bạn di chuyển đến trình điều khiển Chế độ xem ngang đó

và trong điều khiển điểm cảnh quan của bạn, sử dụng mã này theo quan điểm của bạn sẽ xuất hiện

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft]; 
    DigitalSignatureViewController *digisign = [[DigitalSignatureViewController alloc]init]; 
    [self presentModalViewController:digisign animated:NO]; 
    [self dismissModalViewControllerAnimated:NO]; 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return NO; 
} 

và một lần nữa khi bạn di chuyển để điều khiển xem tiếp theo thay đổi giá trị chuỗi sglobalorientation và làm theo các bước tương tự trong điều khiển điểm tiếp theo của bạn.

+0

Ứng dụng "- (NSUInteger): (UIApplication *) ứng dụng được hỗ trợInterfaceOrientationsForWindow: (UIWindow *) window" rất ít ý nghĩa. Thay vào đó, thực hiện nó như là "- (NSUInteger) supportedInterfaceOrientations" trong ViewController của bạn. –

13

Kể từ khi câu trả lời dường như được ẩn trong các ý kiến ​​của câu hỏi và kể từ khi câu trả lời ArunMak là khá khó hiểu, tôi sẽ chỉ cung cấp những gì tôi phát hiện ra:

Tất cả tôi phải làm là thêm chức năng này để tùy chỉnh của tôi UIViewController lớp con cho quan điểm:

- (NSUInteger)supportedInterfaceOrientations { 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { 
     // iPad: Allow all orientations 
     return UIInterfaceOrientationMaskAll; 
    } else { 
     // iPhone: Allow only landscape 
     return UIInterfaceOrientationMaskLandscape; 
    } 
} 

Lưu ý rằng dự án cần cho phép tất cả các định hướng (có nghĩa là: Portrait, Landscape trái, Cảnh phải - nhưng KHÔNG BAO GIỜ Upside Down trên iPhone).

Nếu bạn muốn giới hạn một số hoặc hầu hết các chế độ xem thành Portrait, bạn cần triển khai phương thức trên trong mỗi bộ điều khiển xem đó (hoặc sử dụng một lớp siêu phổ biến cho nó và phân lớp tất cả những thứ khác từ nó) Định hướng thiết bị trong Info.plist chỉ là Portrait, ứng dụng sẽ không bao giờ nghĩ đến việc đi vào cảnh quan.

0

Hãy thử mã này:

[UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeRight; 
self.navigationController.view.center = CGPointMake(([UIScreen mainScreen].bounds.size.width/2), [UIScreen mainScreen].bounds.size.height/2); 
CGFloat angle = 90 * M_PI/180; 
self.navigationController.view.transform = CGAffineTransformMakeRotation(angle); 
self.navigationController.view.bounds = CGRectMake(0, 0,[UIScreen mainScreen].bounds.size.height , [UIScreen mainScreen].bounds.size.width); 
+0

Giải pháp này là sai. Bàn phím sẽ không được xoay khi bạn cố chỉnh sửa một trường. Điều tương tự cũng sẽ xảy ra với các cảnh báo hệ thống. Thanh trạng thái cũng không hoạt động. –

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