2010-12-12 17 views
19

câu hỏi noob tại đây.cách xử lý UIDeviceOrientationFaceUp và UIDeviceOrientationFaceDown?

tôi phát hiện các định hướng với:

UIInterfaceOrientation orientation = [[UIDevice currentDevice] orientation];

tất cả là tốt và dandy và tôi đặt lại vị trí các lĩnh vực văn bản và nhãn của tôi theo hướng báo cáo với

if (orientation == UIDeviceOrientationPortrait || orientation == UIDeviceOrientationPortraitUpsideDown)

và else { } cho mọi thứ khác

sự cố mà tôi mới phát hiện gần đây là khi báo cáo UIDeviceOrientationFaceUp hoặc UIDeviceOrientationFaceDown. làm thế nào để đối phó với tình trạng này? làm cách nào để biết liệu UIDeviceOrientationFaceUpUIDeviceOrientationFaceDown có đang diễn ra trong Chân dung hoặc Phong cảnh không? Tôi biết rằng thiết bị đang hướng lên trên hoặc xuống, nhưng tôi không biết liệu tôi có nên định vị lại mọi thứ thành Chân dung hay Phong cảnh hay không.

cảm ơn bạn!

Trả lời

33

Apple khuyên bạn không nên sử dụng hướng dẫn thiết bị cho bố cục chế độ xem. Thay vào đó, mỗi bộ điều khiển chế độ xem có thuộc tính interfaceOrientationUIApplication có thuộc tính statusBarOrientation, cả hai đều sẽ trả về định hướng hiện tại, phù hợp cho bố cục chế độ xem.

Để theo dõi các thay đổi, có UIViewController các phương pháp như willRotateToInterfaceOrientation:duration: sẽ được gọi và thông báo như UIApplicationWillChangeStatusBarOrientationNotification sẽ được đăng khi thay đổi hướng giao diện xảy ra.

+0

cảm ơn bạn, điều này có vẻ đầy hứa hẹn. Tôi sẽ xem xét – TrekOnTV2017

+0

Đây là câu trả lời đúng, chỉ cần tái cấu trúc đáp ứng định hướng UIDevice (như blog đề xuất) không tốt bằng cách nghe giao diệnĐược biết đến của UIViewController. Công việc tốt đẹp. – Jessedc

+0

Tôi thích câu trả lời này tốt hơn. caprica13, bạn có thể đánh dấu cái này là chính xác không? –

4

Bài đăng trên blog này tại đây: http://blogs.remobjects.com/blogs/mh/2010/06/29/p1685 giải thích điều này thực sự tốt.

+0

hoàn hảo! tôi đã thực hiện các thay đổi và mọi thứ dường như hoạt động tốt ngay bây giờ. cảm ơn bạn. – TrekOnTV2017

+0

Chủ đề tuyệt vời đó khiến tôi đau đầu, gah – Alex

+0

hahaha hãy tưởng tượng nếu tài liệu hướng dẫn của Object-C/framework của Apple trông như thế! –

-1

tôi có những vấn đề tương tự với

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

Phương pháp này tạo ra thông báo cho 7 thiết bị có thể trạng vị trí:

UIDeviceOrientationPortrait 
UIDeviceOrientationPortraitUpsideDown 
UIDeviceOrientationLandscapeLeft 
UIDeviceOrientationLandscapeRight 
UIDeviceOrientationFaceUp 
UIDeviceOrientationFaceDown 
UIDeviceOrientationUnknown 

Nhưng tôi chỉ cần 4 đầu tiên, cũng là cách tiếp cận của tôi để giải quyết vấn đề này (với mã bao gồm): How to handle UIDeviceOrientation for manage views layouts

0

Một chút muộn, hy vọng nó sẽ giúp ích một số.

Đối với iOS 6.0 và sau này:

1) Đặt mã này trong Xem cài đặt của bạn để nhận thông báo luân chuyển:

// Set Listener to receive orientation notifications from the device 
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(detectOrientation) 
               name:UIDeviceOrientationDidChangeNotification 
              object:nil]; 

2) Đặt mã này để bắt Notification sau khi luân chuyển:

-(void)detectOrientation{  
    switch ([[UIDevice currentDevice] orientation]) { 
    case UIDeviceOrientationFaceDown:{ 
     NSLog(@"UIDeviceOrientationFaceDown"); 
     break; 
    } 
    case UIDeviceOrientationFaceUp:{ 
     NSLog(@"UIDeviceOrientationFaceUp"); 
     break; 
    } 
    case UIDeviceOrientationLandscapeLeft:{ 
     NSLog(@"UIDeviceOrientationLandscapeLeft"); 
     break; 
    } 
    case UIDeviceOrientationLandscapeRight:{ 
     NSLog(@"UIDeviceOrientationLandscapeRight"); 
     break; 
    } 
    case UIDeviceOrientationPortrait:{ 
     NSLog(@"UIDeviceOrientationPortrait"); 
     break; 
    } 
    case UIDeviceOrientationPortraitUpsideDown:{ 
     NSLog(@"UIDeviceOrientationPortraitUpsideDown"); 
     break; 
    } 
    case UIDeviceOrientationUnknown:{ 
     NSLog(@"UIDeviceOrientationUnknown"); 
     break; 
    } 
    default:{ 
     break; 
    } 
    } 

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