ユーザーが複数のナビゲーション ビューで複数の選択を行う UINavigationController アプリケーションがあります。次に、最後のビューで、ユーザーが前のビューからの選択によって定義された情報を表示できるようにします。この情報は、NavigationController スタックの finalview のサブビューに表示されます。
例:
UINavigationController
- Several Views including (final view)
Final View
- several Subviews
最後のビューが読み込まれたら、didRotate メソッドを実行する deviceOrientation リスナーを作成します。
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(didRotate:)
name:UIDeviceOrientationDidChangeNotification
object:nil];
次に、currentView というメソッドを呼び出します。これは、現在どのサブビューが表示されているかを把握するために使用されます。つまり、これは [finalview.view addSubView:firstView.view] のようなものがあるときに呼び出されます
[self copyCurrentView:@"firstView"];
- (void)copyCurrentView:(NSString *)currentView {
myCurrentView = currentView;
}
デバイスが回転すると、このメソッドがトリガーされます
-(void)didRotate:(NSNotification *)notification
{
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
if (orientation == UIDeviceOrientationLandscapeLeft)
{
if ([myCurrentView isEqualToString:@"firstView"]) {
[self.navigationController.view insertSubview:firstView.view aboveSubview:self.navigationController.navigationBar];
[self.navigationController setNavigationBarHidden:YES animated:YES];
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:NO];
[firstView.view setBounds:CGRectMake(0, 0, 480.0, 320.0)];
[firstView.view setCenter:CGPointMake(320/2, 480/2)];
[firstView.view setTransform:CGAffineTransformMakeRotation(M_PI / 2)];
}
//other if statments here
}
else if (orientation == UIDeviceOrientationLandscapeRight)
{
// do the same here
}
else if (orientation == UIDeviceOrientationPortrait || orientation == UIDeviceOrientationPortraitUpsideDown)
{
NSLog(@"@port");
if ([myCurrentView isEqualToString:@"firstView"]) {
[self.view insertSubview:firstView.view belowSubview:actionTabBar];
[self.navigationController setNavigationBarHidden:NO animated:YES];
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:NO];
[firstView.view setBounds:CGRectMake(0.0, infoBarHeight, firstView.view.bounds.size.width, firstView.view.bounds.size.height)];
// [firstView.view setCenter:CGPointMake(480/2, 320/2)];
[firstView.view setTransform:CGAffineTransformMakeRotation(M_PI * 2)];
}
}
}
今、これは少し面倒で、おそらく本当にランダムな方法に見えます..しかし、私がオンラインで見つけたすべてのものから、良い効果を得る方法を理解することはできません.
現在、デバイスを左に回転させると、完全に全画面表示になります。正しいサイズなどを使用しているにもかかわらず、再度縦向きに回転すると、元の位置に戻ることはありません。
誰かが現在表示されているサブビューのローテーションでモデルビューを設定するのを手伝ってくれるなら、それは大歓迎です。
理解できる方法で説明するのは非常に難しいので、この質問をするのをためらっています..しかし、私は自分がしたことと助けが必要なことをできる限り説明するために最善を尽くしました..誰かができることを願っています.助けて。
よろしく