2012-12-07 85 views
0

我在ios6的方向有問題。相同的代碼對ios5或5.1工作正常。 我按照ios6標準使用了- (BOOL) shouldAutorotate and -(NSInteger)supportedInterfaceOrientations。但仍然沒有調用「willRotateToInterfaceOrientation」和「didRotateToInterfaceOrientation」。方向不適用於ios6?

這裏是我的代碼: -

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 

    if (!UIInterfaceOrientationIsPortrait(lastOrientation) || !UIInterfaceOrientationIsPortrait(toInterfaceOrientation)) 
    if (!UIInterfaceOrientationIsLandscape(lastOrientation) || !UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) 
    { 

     CGRect frame; 
     int viewAlpha; 
     lastOrientation = toInterfaceOrientation; 

     if (toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) 
     { 

      [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone]; 

      viewAlpha = 1; 
      [MovieControlContainerLandscape setHidden:YES]; 


      if (isDauntless) { 
       [self.navigationController setNavigationBarHidden:NO animated:YES]; 
      } else { 
       [self.navigationController setNavigationBarHidden:NO]; 
      } 


      frame = iPad ? CGRectMake(0, 88, 768, 432) : CGRectMake(0, 88, 320, 180); 
      [movieContainer removeGestureRecognizer:toggleMediaControl]; 


     } 
     else 
     { 
      [PromptToBuy dismissWithClickedButtonIndex:0 animated:YES]; 

      [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone]; 

      viewAlpha = 0; 
      [MovieControlContainerLandscape.layer setCornerRadius:22]; 
      [MovieControlContainerLandscape.subviews.lastObject addSubview:[MediaControls use]]; 


      if (isDauntless) { 
       [self.navigationController setNavigationBarHidden:YES animated:YES]; 
      } else { 
       [self.navigationController setNavigationBarHidden:YES]; 
      } 


      frame = iPad ? CGRectMake(0, 0, 1024, 768) : CGRectMake(0, 0, 480, 320); 

      [movieContainer addGestureRecognizer:toggleMediaControl]; 

      if (isDauntless) { 
       [UIView beginAnimations:nil context:nil]; 
       [UIView setAnimationDuration:0.6]; 
      } 

      if(TSFullScreen) 
      { 
       [movieContainer setAlpha:1]; 
      } 

      if (isDauntless) { 
       [UIView commitAnimations]; 
      } 

     } 

     [viewContainer setAlpha:viewAlpha]; 

     // Size the overlay view for the current orientation. 
     [movieContainer setFrame:frame]; 

    } 

} 


/* Sent to the view controller after the user interface rotates. */ 
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{ 

    if (!UIInterfaceOrientationIsPortrait(lastOrientation) || !UIInterfaceOrientationIsPortrait(fromInterfaceOrientation)) 
    if (!UIInterfaceOrientationIsLandscape(lastOrientation) || !UIInterfaceOrientationIsLandscape(fromInterfaceOrientation)) 
    { 

     float duration = .5; 

     if (fromInterfaceOrientation == UIInterfaceOrientationPortrait || fromInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) 
     { 

      if (isDauntless) { 
       [UIView transitionWithView:movieContainer duration:duration options:UIViewAnimationOptionTransitionNone animations:^{ 

        /* Move movie view to parent center. */ 
        [self.moviePlayerController.view setCenter:movieContainer.center]; 

       } completion:^(BOOL finished) { 

        [UIView beginAnimations:nil context:NULL]; 
        [UIView setAnimationDuration:duration]; 
        CGRect frame = movieContainer.frame; 
        /* Size movie view to fit parent view. */ 
        frame.origin.y = 0; 
        [self.moviePlayerController.view setFrame:frame]; 
        [UIView commitAnimations]; 

        CGPoint center = CGPointMake(movieContainer.center.x, -50); 
        [MovieControlContainerLandscape setTag:0]; 
        [MovieControlContainerLandscape setHidden:NO]; 
        [MovieControlContainerLandscape setCenter:center]; 

        [self toggleMovieController]; 

       }]; 

      } else { 

       CGRect frame = movieContainer.frame; 
       /* Size movie view to fit parent view. */ 
       frame.origin.y = 0; 
       [self.moviePlayerController.view setFrame:frame]; 

       CGPoint center = CGPointMake(movieContainer.center.x, -50); 
       [MovieControlContainerLandscape setTag:0]; 
       [MovieControlContainerLandscape setHidden:NO]; 
       [MovieControlContainerLandscape setCenter:center]; 

       [self toggleMovieController]; 

      } 


     } 
     else 
     { 

      if (!isDauntless) { 
       [MovieControlContainer setFrame:CGRectMake(0, 44, 768, 68)]; 
      } 

      [MovieControlContainer addSubview:[MediaControls use]]; 

      //NSLog(@"MovieControlContainer is %@, MovieControlContainer subviews: %@",MovieControlContainer,[MovieControlContainer subviews]); 


      if (isDauntless) { 
       [UIView beginAnimations:nil context:NULL]; 
       [UIView setAnimationDuration:duration]; 
      } 

      if(TSFullScreen){ 
       [movieContainer setAlpha:0]; 
      } 

      CGRect frame = movieContainer.frame; 
      /* Size movie view to fit parent view. */ 
      frame.origin.y = 0; 
      [self.moviePlayerController.view setFrame:frame]; 

      if (isDauntless) { 
       [UIView commitAnimations]; 
      } 

     } 

    } 

} 



- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 

     return !mediaTypeIsAudio && isOrientationSupported; 

} 



//----supported method for ios6--------// 


- (BOOL) shouldAutorotate 
{ 
    return YES; 
} 




-(NSInteger)supportedInterfaceOrientations{ 

    NSInteger mask = 0; 
    if ([self shouldAutorotateToInterfaceOrientation: UIInterfaceOrientationLandscapeRight]) 
     mask |= UIInterfaceOrientationMaskLandscapeRight; 
    if ([self shouldAutorotateToInterfaceOrientation: UIInterfaceOrientationLandscapeLeft]) 
     mask |= UIInterfaceOrientationMaskLandscapeLeft; 
    if ([self shouldAutorotateToInterfaceOrientation: UIInterfaceOrientationPortrait]) 
     mask |= UIInterfaceOrientationMaskPortrait; 
    if ([self shouldAutorotateToInterfaceOrientation: UIInterfaceOrientationPortraitUpsideDown]) 
     mask |= UIInterfaceOrientationMaskPortraitUpsideDown; 
    return mask; 

} 

//i have set the rootviewcontroller in appdelegate file 
self.navigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController]; 
    self.window.rootViewController = self.navigationController. 

請幫我從這個問題冒了出來。我無法找到解決方案。感謝提前!!

+0

清潔香港我answer..http://stackoverflow.com/questions/13580386/iphone-風景問題/ 13586490#13586490 – Rajneesh071

+0

[無法處理iOS 6中的方向?](http://stackoverflow.com/questions/12519693/unable-to-handle-orientation-in-ios-6) – Pfitz

+1

Plz指導我如何實現與動畫定向的事物就像我在上面的代碼中爲ios5所做的一樣。我應該把這個代碼放在ios6中。 !請幫我解決問題,並且不能從中解脫出來。 –

回答

0

ios6你必須使用這種方法vieworientation

-(BOOL)shouldAutorotate 
{ 
    return YES; 
} 
-(NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskAll; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return UIInterfaceOrientationMaskAll; 
} 

並檢查我的答案Link

+1

但我的問題是,willRotateToInterfaceOrientation和didRotateToInterfaceOrientation沒有被調用,其中主要功能是寫入視頻方向與動畫。 –

+0

在ios 6中添加了上述方法。以前的方法不會調用。 – Rajneesh071

+1

那麼我該如何實現ios6的視頻方向定向動畫呢? –

相關問題