2010-04-29 24 views

Trả lời

8

Nếu bạn không muốn bộ điều khiển chế độ xem của mình xoay vòng chỉ cần ghi đè phương thức bộ điều khiển chế độ xemAutoRotateToInterface để trả về false cho bất kỳ hướng nào bạn không muốn hỗ trợ ... Here is a reference.

Trong trường hợp đó u chỉ muốn xử lý luân chuyển một số cách khác, bạn có thể trở lại sai trong các phương pháp trên và đăng ký UIDeviceOrientationDidChangeNotification như vậy

NSNotificationCenter* nc = [NSNotificationCenter defaultCenter]; 
[nc addObserver:self 
     selector:@selector(handleOrientationDidChange:) 
      name:UIDeviceOrientationDidChangeNotification 
     object:nil]; 

Bây giờ khi u nhận được thông báo u có thể làm bất cứ điều gì bạn muốn với nó ...

+2

Tôi nghĩ rằng anh ấy vẫn muốn xoay nhưng sử dụng hoạt ảnh khác hoặc không hoạt ảnh. –

+0

thay đổi câu trả lời để phản ánh rằng – Daniel

+0

đã làm các trick. –

16

Có, bạn có thể vô hiệu hóa hoạt ảnh mà không làm hỏng mọi thứ.

Các mã sau đây sẽ vô hiệu hóa các "hộp đen" xoay hình ảnh động, mà không phiền với hình ảnh động khác hoặc mã định hướng:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { 
    [UIView setAnimationsEnabled:YES]; 
} 


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    [UIView setAnimationsEnabled:NO]; 
    /* Your original orientation booleans*/ 
} 

Nơi nó trong UIViewController của bạn và tất cả nên được tốt. Có thể áp dụng cùng một phương thức cho bất kỳ hoạt ảnh không mong muốn nào trong iOS.

Chúc bạn may mắn với dự án của mình.

+8

Đối với iOS 6+ (và trước đó) khả năng tương thích, bạn có thể đặt [UIView setAnimationsEnabled: NO] trong willRotateToInterfaceOrientation: duration: thay vì shouldAutorotateToInterfaceOrientation: –

+4

Hãy nhớ gọi siêu thực thi nếu bạn ghi đè lên những điều này. Cụ thể, tài liệu táo nói rằng nếu bạn đang ghi đè willRotateToInterfaceOrientation: duration: or didRotateFromInterfaceOrientation: rằng "Việc triển khai phương thức này của bạn phải gọi siêu tại một số điểm trong quá trình thực hiện." – levigroker

+0

Đây là phiên bản Swift ... http://stackoverflow.com/a/6292506/294884 – Fattie

0

Câu trả lời của @Nils Munch ở trên là tìm kiếm < iOS7. Đối với iOS 7 trở lên, bạn có thể sử dụng:

- (void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { 
    [UIView setAnimationsEnabled:NO]; 

    [coordinator notifyWhenInteractionEndsUsingBlock:^(id<UIViewControllerTransitionCoordinatorContext> context) { 
     [UIView setAnimationsEnabled:YES]; 
    }]; 

    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; 
} 
+0

Thật sao ??? Tại sao tài liệu nói về 8+? –

+0

Khối đó không bao giờ được gọi cho tôi ..... – Kevin

+0

Chỉ cần thử lại trong trình gỡ rối, chạy iOS 8.4 và chắc chắn nó được gọi khi tôi xoay thiết bị. Đối với PKCLsoft

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