我理解你的问题,因为你试图不旋转整个界面,而是单独旋转紫色和红色方块。
我创建了一个UIViewController
类似于您的布局。
黑色方块是 UIView,白色方块只是为了让我知道黑色视图何时旋转。此视图连接到view1
控制器上的属性。
有 4 个按钮连接到btnx
(x 运行 1 到 4)属性。
由于我不再想自动旋转界面,我只支持纵向。
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
为了手动进行旋转,我向 ViewController 添加了一个方法。它确定将组件从纵向旋转到当前方向所需的角度,创建旋转变换并将其应用于所有出口。
- (void)deviceDidRotate:(NSNotification *)notification
{
UIDeviceOrientation currentOrientation = [[UIDevice currentDevice] orientation];
double rotation = 0;
UIInterfaceOrientation statusBarOrientation;
switch (currentOrientation) {
case UIDeviceOrientationFaceDown:
case UIDeviceOrientationFaceUp:
case UIDeviceOrientationUnknown:
return;
case UIDeviceOrientationPortrait:
rotation = 0;
statusBarOrientation = UIInterfaceOrientationPortrait;
break;
case UIDeviceOrientationPortraitUpsideDown:
rotation = -M_PI;
statusBarOrientation = UIInterfaceOrientationPortraitUpsideDown;
break;
case UIDeviceOrientationLandscapeLeft:
rotation = M_PI_2;
statusBarOrientation = UIInterfaceOrientationLandscapeRight;
break;
case UIDeviceOrientationLandscapeRight:
rotation = -M_PI_2;
statusBarOrientation = UIInterfaceOrientationLandscapeLeft;
break;
}
CGAffineTransform transform = CGAffineTransformMakeRotation(rotation);
[UIView animateWithDuration:0.4 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
[self.btn1 setTransform:transform];
[self.btn2 setTransform:transform];
[self.btn3 setTransform:transform];
[self.btn4 setTransform:transform];
[self.view1 setTransform:transform];
[[UIApplication sharedApplication] setStatusBarOrientation:statusBarOrientation];
} completion:nil];
}
最后要做的是让操作系统调用我的方法。为此,我application:didFinishLaunchingWithOptions:
在 AppDelegate 中添加了以下代码。
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self.viewController selector:@selector(deviceDidRotate:) name:UIDeviceOrientationDidChangeNotification object:nil];
我不确定这是否正是您想要的,但我相信它至少是相似的,因此您可以从中获得一些想法来解决您的问题。我可以为我创建的工作 iPad 应用程序提供源代码来说明这一点。