2010-03-25 4 views
42

Có phương pháp đặc biệt nào để có được định hướng của iPhone không? Tôi không cần nó bằng độ hoặc radian, tôi muốn nó trả về một đối tượng UIInterfaceOrientation. Tôi chỉ cần nó để xây dựng nếu khác nhưLàm thế nào để có được định hướng hiện tại của iPhone?

if(currentOrientation==UIInterfaceOrientationPortrait ||currentOrientation==UIInterfaceOrientationPortraitUpsideDown) { 
//Code 
} 
if (currentOrientation==UIInterfaceOrientationLandscapeRight ||currentOrientation==UIInterfaceOrientationLandscapeLeft) { 
//Code 
} 

Cảm ơn bạn trước!

Trả lời

110

này rất có thể là những gì bạn muốn:

UIInterfaceOrientation interfaceOrientation = [[UIApplication sharedApplication] statusBarOrientation]; 

Sau đó bạn có thể sử dụng các macro hệ thống như:

if (UIInterfaceOrientationIsPortrait(interfaceOrientation)) 
{ 

} 

Nếu bạn muốn sử dụng hướng thiết bị:

UIDeviceOrientation deviceOrientation = [[UIDevice currentDevice] orientation]; 

này bao gồm các số liệt kê như UIDeviceOrientationFaceUpUIDeviceOrientationFaceDown

+0

Yep, nó làm việc! Hơn bạn rất nhiều! – Knodel

+29

Đây là sai về mặt kỹ thuật, bạn đang nhận được một UIDeviceOrientation từ cuộc gọi phương thức của bạn và lưu trữ nó trong một UIInterfaceOrientation. Một UIInterfaceOrientation là một trong số 4, và đại diện cho giao diện của bạn trông như thế nào. UIDeviceOrientation là một trong số 6 (bao gồm đặt phẳng và đặt phẳng lộn ngược) và cho bạn biết định hướng của thiết bị, không nhất thiết giao diện của bạn trông như thế nào. Giao diện của bạn có thể ở chế độ dọc nhưng nếu thiết bị đang ngồi trên bàn, nó sẽ trả về UIDeviceOrientationFaceUp. –

+12

@CoryImdieke: Cảm ơn bạn đã cập nhật sự khác biệt giữa hướng thiết bị và giao diện. UIInterfaceOrientation currentOrientation = [[UIApplication sharedApplication] statusBarOrientation]; là đúng API – Senthil

11

Như đã thảo luận trong các câu trả lời khác, bạn cần interfaceOrientation, chứ không phải deviceOrientation.

Cách dễ nhất để thực hiện việc này là sử dụng giao diện thuộc tínhOrientation trên UIViewController của bạn. (Vì vậy, thường xuyên nhất, chỉ: self.interfaceOrientation sẽ làm).

Giá trị có thể là:

UIInterfaceOrientationPortrait   = UIDeviceOrientationPortrait, 
UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown, 
UIInterfaceOrientationLandscapeLeft  = UIDeviceOrientationLandscapeRight, 
UIInterfaceOrientationLandscapeRight  = UIDeviceOrientationLandscapeLeft 

Hãy nhớ rằng: hướng Left được nhập bằng cách xoay điện thoại sang bên phải.

+0

Quá tệ hiện không được chấp nhận. – Rivera

+0

Vâng, điều này không được chấp nhận, chúng ta phải làm gì bây giờ? – trapper

4

Đây là đoạn mã tôi viết để viết vì tôi đã nhận được các vấn đề lạ khi quay lại chế độ xem gốc khi định hướng đã thay đổi .... Tôi thấy bạn chỉ cần gọi phương thức cần được gọi nhưng đã thực hiện dường như là .... này hoạt động tuyệt vời không có lỗi

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    if ([[UIDevice currentDevice]orientation] == UIInterfaceOrientationLandscapeLeft){ 
     //do something or rather 
     [self 
shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeLeft]; 
     NSLog(@"landscape left"); 
    } 
    if ([[UIDevice currentDevice]orientation] == UIInterfaceOrientationLandscapeRight){ 
     //do something or rather 
     [self 
shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeRight]; 
     NSLog(@"landscape right"); 
    } 
    if ([[UIDevice currentDevice]orientation] == UIInterfaceOrientationPortrait){ 
     //do something or rather 
     [self shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationPortrait]; 
     NSLog(@"portrait"); 
    } 
} 
+0

Thao tác này sẽ không hoạt động đối với 'UIDeviceOrientationFaceUp' và' UIDeviceOrientationFaceDown' – trapper

1

UIInterfaceOrientation hiện đang bị phản đối, và UIDeviceOrientation bao gồm UIDeviceOrientationFaceUpUIDeviceOrientationFaceDown do đó không thể được dựa vào để cung cấp cho bạn định hướng giao diện.

Giải pháp là khá đơn giản mặc dù

if (CGRectGetWidth(self.view.bounds) > CGRectGetHeight(self.view.bounds)) { 
    // Landscape 
} else { 
    // Portrait 
}