2012-10-01 31 views
12

Tôi đang tạo một trò chơi cho phép thiết bị ở hướng ngang hoặc trái hoặc phải, và trình phát có thể thay đổi hướng trong khi bị tạm dừng. Khi họ cần tôi thay đổi cách trò chơi diễn giải gia tốc dựa trên hướng.iOS 6 - Cách chạy mã tùy chỉnh khi định hướng thay đổi

Trong iOS 5, tôi đã sử dụng willRotateToInterfaceOrientation để nắm bắt các thay đổi và thay đổi các biến của tôi, nhưng điều đó không được chấp nhận trong iOS6. Mã hiện tại của tôi trông giống như sau:

if(toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)  
     rect = screenRect; 

    else if(toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight){ 
     rect.size = CGSizeMake(screenRect.size.height, screenRect.size.width); 
    GameEngine *engine = [GameEngine sharedEngine]; 
    if(toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft){ 
     engine.orientation = -1; 
    } else { 
     engine.orientation = 1; 
    } 
} 

Tôi hiểu rằng thay thế là phương thức viewWillLayoutSubviews trong lớp UIViewController. Tôi đang xây dựng trò chơi này trong cocos2d 2.1 và có vẻ như không phải là một lớp UIViewController trong dự án demo, vì vậy tôi không rõ ràng về cách kết hợp nó và cách mã nên xem xét để thực hiện công việc này.

Trả lời

36

Nghe thay đổi hướng thiết bị:

[[NSNotificationCenter defaultCenter] 
     addObserver:self 
      selector:@selector(deviceOrientationDidChangeNotification:) 
       name:UIDeviceOrientationDidChangeNotification 
      object:nil]; 

Khi được thông báo, có được định hướng thiết bị từ UIDevice:

- (void)deviceOrientationDidChangeNotification:(NSNotification*)note 
{ 
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; 
    switch (orientation) 
    { 
     // etc... 
    } 
} 
+3

+1 lựa chọn chính xác cho các nhiệm vụ nhất định. Chỉ cần cẩn thận vì bạn cũng sẽ nhận được thông báo về các thay đổi hướng đối mặt và suy giảm và lưu ý sự khác biệt giữa 'UIInterfaceOrientation ...' và 'UIDeviceOrientation ...' – Till

+0

@Darren đó chính xác là những gì tôi cần. Cảm ơn! –

+0

@Till - bằng cách đối mặt với so với xuống bạn có nghĩa là khi nó orients vào chân dung hoặc chân dung lộn ngược? Hay cái gì khác? Ngoài ra, tôi giả định DeviceOrientation và InterfaceOrientation hầu như luôn giống nhau ngoại trừ trong các trường hợp đặc biệt như nhiều chế độ xem hoặc nếu InterfaceOrientation đã được đặt theo lập trình không phù hợp với hướng thiết bị. Hoặc có những trường hợp khác để tìm ra cho rằng có thể gây ra một vấn đề? –

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