2

私たちのアプリは、強制的に縦向きモードになっています。自動回転はなく、サポートされているインターフェイスの向きは縦向きに設定されています。

次に、横向きにする必要がある「署名」ビューを表示する必要があります。これは、ポートレート ビュー上でモーダルに入る必要があり、ナビゲーション コントローラーとナビゲーション バーが必要です。縦向きに回転することはできません。また、モーダル ビューが非表示の場合、前のビューは縦向きのままにする必要があります。

私は使用してみました:

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:YES];

しかし、それはナビゲーションバーを回転させません...おそらく、動作させるにはsupportedInterfaceOrientations0を返す必要があるためです。

必要なことを行う方法はありますか?ペン先の使用 (絵コンテではありません)。

どうもありがとう

トム

4

3 に答える 3

2

これらの手順を実行するだけです。

  1. ターゲットの回転を可能にします。
  2. アプリデリゲートで UINavigationController のカテゴリを作成します(アプリはナビゲーションベースだと思います)のように

-

@interface UINavigationController (Autorotation)

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation   - (BOOL) shouldAutorotate;
- (NSUInteger) supportedInterfaceOrientations;
@end

@implementation UINavigationController (Autorotation)


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{

    if ([self.visibleViewController isKindOfClass:["your view controller name" class]]) {
        return YES;
    }
    return  (toInterfaceOrientation == UIInterfaceOrientationPortrait);
}

-(BOOL) shouldAutorotate{
    return YES;
}

-(NSUInteger) supportedInterfaceOrientations{

    if ([self.visibleViewController isKindOfClass:["your view controller name" class]]) {
        return UIInterfaceOrientationMaskAll;
    }

    return UIInterfaceOrientationMaskPortrait;
}

@end

これが役立つことを願っています。

于 2013-01-02T13:15:00.300 に答える
1

そのiPhone用

最初にサポートされるインターフェイスの向きが設定されますすべてのインターフェイス次に

yourview.hファイル内

      AppDelegate *appDel;
 BOOL isShowingLandscapeView;
 CGAffineTransform _originalTransform;
 CGRect _originalBounds;
 CGPoint _originalCenter;
 BOOL isLand,touch;

yourview.mファイル内

    -(void)viewWillAppear:(BOOL)animated
    {
          isLand = NO;

appDel = (AppDelegate*)[[UIApplication sharedApplication] delegate];
[[UIApplication sharedApplication] setStatusBarHidden:TRUE withAnimation:UIStatusBarAnimationNone];
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
_originalTransform = [[appDelegate navigationController].view transform];
_originalBounds = [[appDelegate navigationController].view bounds];
_originalCenter = [[appDelegate navigationController].view center];

[appDelegate navigationController].view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

//[appDelegate navigationController].view.bounds  = CGRectMake(0.0,20.0, 480.0, 320.0);
CGSize result = [[UIScreen mainScreen] bounds].size;

if(result.height == 480)
{

    CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation(M_PI/2);
    landscapeTransform = CGAffineTransformTranslate (landscapeTransform, +60.0, +80.0);
    [[appDelegate navigationController].view setTransform:landscapeTransform];

    [appDelegate navigationController].view.bounds  = CGRectMake(-20.0,00.0, 480.0, 320.0);
    [appDelegate navigationController].view.center  = CGPointMake (240.0, 160.0);
}
if(result.height == 568)
{
    CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation(M_PI/2);
    landscapeTransform = CGAffineTransformTranslate (landscapeTransform, +124.0, +124.0);
    [[appDelegate navigationController].view setTransform:landscapeTransform];
    [appDelegate navigationController].view.bounds  = CGRectMake(0.0,0.0, 568, 320.0);
    [appDelegate navigationController].view.center  = CGPointMake (284, 160.0);
}


    }


  -(NSUInteger)supportedInterfaceOrientations
 {
     return UIInterfaceOrientationLandscapeLeft;
 }
  -(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
 {
   AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
  CGSize result = [[UIScreen mainScreen] bounds].size;

  if(result.height == 480)
  {
    [appDelegate navigationController].view.bounds  = CGRectMake(0.0,0.0, 480.0, 320.0);
 }
if(result.height == 568)
{
    [appDelegate navigationController].view.bounds  = CGRectMake(0.0,0.0, 568, 320.0);
}

//    [appDelegate navigationController].view.bounds  = CGRectMake(0.0,0.0, 480.0, 320.0);
 }
     - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
     if(interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight)
    {
       return YES;
    }
   else
   {
      return NO;
   }
   }
  - (void) viewWillDisappear:(BOOL)animated {

   AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
  [[appDelegate navigationController].view setTransform:_originalTransform];
  [[appDelegate navigationController].view setBounds:_originalBounds];
  [[appDelegate navigationController].view setCenter:_originalCenter];

  if (isLand == NO) {
     isLand = YES;

    [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeRight;
} else {
    isLand = NO;
     [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationPortrait;
 }


 }
于 2013-01-02T12:58:32.977 に答える
0

ここで説明したように、より多くの(必要なすべてのポートレートとランドスケープ)モードを許可する必要があります

理由:アプリケーションがポートレートのみをサポートしている場合、ViewControllerはランドスケープをサポートできません。アプリケーションが横向きと縦向きの両方をサポートしている場合、すべてのViewControllerでさらに制限を定義できます。

すべてのViewControllerのソースで、その単一のViewControllerの派生物で縦向きまたは横向きを許可するかどうかを、ケースバイケースで決定できます。また、すべてのポートレートのものなどに共通のスーパークラスを作成することも考えられます。

于 2013-01-02T12:57:49.237 に答える