1

私はiOS6でプロジェクトを行っています。今のところUIViewControllerは1つしかありません。UIScrollViewがあります。私はそれにいくつかのコントロール(テキストフィールド、ボタン、カスタムビューなど)を持っています。それで私はポートレートモードのためにそのプロジェクトを構築しました。今、私はそれを横向きと縦向きの両方に合うように動かしたいと思います。そのために私はこのコードを持っています

- (NSUInteger)supportedInterfaceOrientations
{
return (UIInterfaceOrientationMaskAll);
}
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    self.scrollView.contentMode = UIViewContentModeTopRight;
self.scrollView.scrollEnabled = YES;
NSLog(@"the end point is %f",self.currentCGRectLocation.origin.y);
CGPoint scrollPoint = CGPointMake(0.0, (self.currentCGRectLocation.origin.y/500)*400);
[self.scrollView setContentOffset:scrollPoint animated:YES];

CGFloat scrollViewHeight = 0.0f;
for (UIView *view in self.scrollView.subviews)
{
    scrollViewHeight += view.frame.size.height;
}

CGSize newSize = CGSizeMake(100,scrollViewHeight);

[self.scrollView setContentSize:newSize];

self.view.userInteractionEnabled =YES;
self.scrollView.userInteractionEnabled = YES;
}

そして私のviewDidLoadで

  - (void)viewDidLoad
{
[self.scrollView setAutoresizingMask:UIViewAutoresizingFlexibleRightMargin];

}

私のAppDelegate.mファイルには

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
return (UIInterfaceOrientationMaskAll);
}

私の問題は、縦向きから横向きに移動すると、スクロールビューを除くすべてのコントロールが完全に整列することです。シミュレーターの幅は、ポートレートモードでは900、ランドスケープモードでは1024です。したがって、私のスクロールビューでは、ランドスケープモードでも900幅のスクロールがあります。簡単に上下に移動できますが、そこに引っかかっているようなものです。モックアップを付けています。スクロールビューは縦向き(900)の終わりにあり、横向き(再び900)でほぼ2/3です。モックアップはここにあります:http://dl.dropbox.com/u/40597849/mockup3.png。さらに詳しい情報が必要な場合は、お問い合わせください。ありがとうございます。

編集:UIScrollViewのMainStoryboardでも、[自動レイアウトを使用する]チェックボックスをオフにしました。チェックすると、縦向きから横向きに移動すると(必要に応じて)最後にスクロールビューが表示されますが、横向きから縦向きに移動すると画面がフリーズします。上下に移動できません。

4

1 に答える 1

0

この2つのメソッドは、縦向きから横向きに移動したいViewControllerに追加されています。スクロールビューの「自動レイアウトを使用」チェックボックスをまだチェックしていません。

- (NSUInteger)supportedInterfaceOrientations
{
  return (UIInterfaceOrientationMaskAll);
}
-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
[super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft
    ||  toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)
{
    CGRect rect = self.view.frame;
    rect.size.width = self.view.frame.size.width+245;
    rect.size.height = self.view.frame.size.height+245;
    self.scrollView.frame = rect;
}

}

これは AppDelegate.m ファイルに追加されます

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
return (UIInterfaceOrientationMaskAll);
}

これは私にとってはうまくいきました。それが役に立てば幸い。

于 2013-01-08T20:23:41.847 に答える