旋转iphone时如何更改视图(更改笔尖)。 但它应该只在一个标签中发生! 我尝试过:
- (void)viewDidLoad {
LandscapeViewController *viewController = [[LandscapeViewController alloc]
initWithNibName:@"LandscapeView" bundle:nil];
self.landscapeViewController = viewController;
[viewController release];
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:)
name:UIDeviceOrientationDidChangeNotification object:nil]; }
- (void)orientationChanged:(NSNotification *)notification
{
[self performSelector:@selector(updateLandscapeView) withObject:nil afterDelay:0];
}
- (void)updateLandscapeView
{
UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
if (UIDeviceOrientationIsLandscape(deviceOrientation) && !isShowingLandscapeView)
{
[self presentModalViewController:self.landscapeViewController animated:YES];
isShowingLandscapeView = YES;
}
else if (deviceOrientation == UIDeviceOrientationPortrait && isShowingLandscapeView)
{
[self dismissModalViewControllerAnimated:YES];
isShowingLandscapeView = NO;
}
}
但是景观视图会出现在所有标签中。 (当此代码加载一次时)。 有什么想法吗?
答案 0 :(得分:0)
当旋转发生变化时,视图控制器正在接收UIDeviceOrientationDidChangeNotification
通知,无论是否正在显示。而是尝试使用UIViewController
的内置方法来响应旋转。
答案 1 :(得分:0)
这是来自Apple的文档(View Controller Programming Guide):
标签栏控制器和视图旋转
标签栏控制器支持纵向 默认情况下方向,不要 旋转到横向 除非所有的根视图 控制器支持这样的 取向。当设备方向 更改发生,标签栏控制器 查询其视图控制器数组。 如果他们中的任何一个不支持 方向,标签栏 控制器不会改变它 取向。
所以,我不确定标签栏控制器是否只针对单个视图进行旋转。
答案 2 :(得分:0)
坦克为您的评论! 我找到了一个解决方法:
//Remove Observer if not in Landscape
- (void)viewDidDisappear:(BOOL)animated {
if (isShowingLandscapeView == NO) {
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil];
}
}
//Add Observer if not in Landscape
- (void)viewDidAppear:(BOOL)animated {
if (isShowingLandscapeView == NO) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil];
}
}