2012-02-29 79 views
0

我遇到模态视图显示的问题。我的第一个观点旋转得很好。模态视图的控制器实现了“ShouldAutorotationToInterfaceRotation”方法,但是当我旋转设备或模拟器时,模态视图不会旋转。我的模态视图不旋转

我已经添加了一些注释来检查第一个视图是否检测到旋转事件而不是模态视图,但不是,它不会获取事件。

你有线索吗?

回答

1

您将需要订阅NSNotificationCenter才能接收您的模态视图的旋转事件。然后,如果要保持相对于底部视图正确定向的模式视图,则一种解决方案是转换视图。这里有一个实现:

将这个在viewDidLoad中和原来的方向保存为一个角度:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) 
              name:UIDeviceOrientationDidChangeNotification object:nil]; 

int initialOrientation = [[UIApplication sharedApplication] statusBarOrientation]; 
if (initialOrientation == UIDeviceOrientationPortrait) 
    initialAngle = 0.0; 
else if (initialOrientation == UIDeviceOrientationLandscapeRight) 
    initialAngle = 90.0; 
else if (initialOrientation == UIDeviceOrientationPortraitUpsideDown) 
    initialAngle = 180.0; 
else if (initialOrientation == UIDeviceOrientationLandscapeLeft) 
    initialAngle = 270.0; 

currentAngle = initialAngle; 

然后定义功能orientationChanged:(NSNotification *)通知与代码正确的相对旋转到初始方向:

int newOrientation = [[notification object] orientation]; 
if (newOrientation == UIDeviceOrientationPortrait) 
    desiredAngle = 0.0; 
else if (newOrientation == UIDeviceOrientationLandscapeRight) 
    desiredAngle = 90.0; 
else if (newOrientation == UIDeviceOrientationPortraitUpsideDown) 
    desiredAngle = 180.0; 
else if (newOrientation == UIDeviceOrientationLandscapeLeft) 
    desiredAngle = 270.0; 

if(desiredAngle != currentAngle) 
{ 
    CGAffineTransform rotate = CGAffineTransformMakeRotation(M_PI * (-desiredAngle+initialAngle)/180.0);  
    CGAffineTransform translate = CGAffineTransformMakeTranslation(0, 0); 
    [[self releaseView] setTransform:CGAffineTransformConcat(translate, rotate)]; 
} 
currentAngle = desiredAngle;