标签:
1、不要直接在UIWindow里面直接使用UIView,而是加载根试图控制器(UIViewController)然后使用控制器改变UIView,这也是Apple官方推荐的方式
[self beginAppearanceTransition:YES animated:NO]; [parentViewController addChildViewController:self]; [parentViewController.view addSubview:self.view]; [self didMoveToParentViewController:self]; [self endAppearanceTransition];
2、
在横屏应用中,使用keyWindow添加一个视图,切换设备横屏方向,发现添加的视图不会随着变化方向。
并且只有Window的RootViewController可以监听到屏幕旋转变化。
[[UIApplicationsharedApplication].keyWindow addSubview:view];
解决方法如下:
定义RotateWindow继承UIWindow,并重写addSubview方法。AppDelegate中的window使用RotateWindow。
#define degreesToRadian(x) (M_PI * (x) / 180.0) - (void)addSubview:(UIView *)view { if ([self.subviews count] >= 1) { float angle = ([UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeLeft)?90:-90; view.transform = CGAffineTransformMakeRotation(degreesToRadian(angle)); view.frame = CGRectOffset(self.frame, 0, 0); } [super addSubview:view]; }
定义RotateViewController作为window的RootViewController,并重写以下方法
// 仅允许横屏 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations. return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight); } // 设备旋转时修改添加视图方向 - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { UIWindow *window = [UIApplication sharedApplication].keyWindow; int i = 0; for (UIView *view in window.subviews) { if (i != 0) { CGAffineTransform transform = view.transform; transform = CGAffineTransformRotate(transform, degreesToRadian(180)); view.transform = transform; } i++; } } 3、方法: -(void)rotateView { UIWindow *keywindow = [[UIApplication sharedApplication] keyWindow]; UIView *bgView = [[UIView alloc] initWithFrame:keywindow.bounds]; [keyWindow addSubview:bgView]; [bgView release]; [bgView addSubview:_overlayView]; [bgView addSubview:self]; self.center = CGPointMake(keywindow.bounds.size.width/2.0f, keywindow.bounds.size.height/2.0f); // Rotate the image by the specific angle. [bgView setTransform:CGAffineTransformMakeRotation(angle)]; [self fadeIn]; }
出自:http://blog.csdn.net/leikezhu1981/article/details/38072221
标签:
原文地址:http://www.cnblogs.com/mgy007/p/4718679.html