У меня есть представление, которое загружается в любой ориентации пользовательского интерфейса. У меня есть требование разрешить пользователям выбирать и блокировать желаемую ориентацию. Ниже приведено изображение моего тестового приложения. Я хочу программно изменить ориентацию вида на UIInterfaceOrientationLandscapeLeft, когда выбран Left.UIView вращение ориентации ПОСЛЕ того, как он отображается
Я знаю, как его заблокировать. У меня просто возникают проблемы с поворотом представления, как будто физическое вращение устройства.
Вот мой код:
- (void)rotateView:(UIInterfaceOrientation)toInterfaceOrientation
{
self.interfaceOrientation = toInterfaceOrientation;
CGFloat rotationFactor = 0;
CGRect frame;
switch (toInterfaceOrientation) {
case UIInterfaceOrientationPortrait:
frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, self.view.frame.size.width, self.view.frame.size.height);
rotationFactor = M_PI;
break;
case UIInterfaceOrientationLandscapeRight:
frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, self.view.frame.size.height, self.view.frame.size.width);
rotationFactor = M_PI_2;
break;
case UIInterfaceOrientationLandscapeLeft:
frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, self.view.frame.size.height, self.view.frame.size.width);
rotationFactor = 3 * M_PI_2;
break;
default:
break;
}
// check current orientation
if ([[UIApplication sharedApplication] statusBarOrientation] != toInterfaceOrientation) {
self.orientationLocked = NO;
// [[UIApplication sharedApplication] setStatusBarHidden:YES];
// [[UIApplication sharedApplication] setStatusBarOrientation:toInterfaceOrientation];
// [[UIApplication sharedApplication] setStatusBarHidden:NO];
// no, the orientation is wrong, we must rotate the UI
self.navigationController.view.userInteractionEnabled = NO;
[UIView beginAnimations:@"rotateView" context:NULL];
[UIView setAnimationDelegate:self];
// setup status bar
[[UIApplication sharedApplication] setStatusBarOrientation:toInterfaceOrientation animated:NO];
// rotate main view, in this sample the view of navigation controller is the root view in main window
[self.navigationController.view setTransform: CGAffineTransformMakeRotation(3 * M_PI_2)];
// set size of view
[self.navigationController.view setFrame:frame];
[UIView commitAnimations];
self.orientationLocked = YES;
}
}
Я попытался, как другие предположили, но безрезультатно. Я знаю, что значения вращения неверны. Я просто пытаюсь заставить взгляд вращаться к любому вращению прямо сейчас.
Единственная проблема, из-за которой эти рекомендации могут не работать, может быть вызвана тем, что это представление является представлением корневого представления. Может ли кто-нибудь помочь мне программно повернуть это представление от портрета к любой ориентации ландшафта?
Я думал, что речь идет о «когда», «не» как ». –