我想在不改变iPhone应用程序中的设备方向的情况下更改应用程序的方向。 我想以编程方式将我的视图从portraid模式更改为landscap模式。
并且还想知道苹果商店是否会接受这个?
谢谢
现在我从其他人那里得到了解决方案
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
当您在此时添加此行时会出现一条警告,并且要删除此警告,只需在您的实施文件中添加以下代码即可。
@interface UIDevice (MyPrivateNameThatAppleWouldNeverUseGoesHere)
- (void) setOrientation:(UIInterfaceOrientation)orientation;
@end
然后在波纹管方法中,只需要编写此代码..
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
但是现在想知道苹果应用商店是否接受了这个?
谢谢
答案 0 :(得分:5)
使用此行以编程方式更改方向...
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
当你在此时添加此行时会出现一个警告,并且要删除此警告,只需在实现文件中添加以下代码即可。
@interface UIDevice (MyPrivateNameThatAppleWouldNeverUseGoesHere)
- (void) setOrientation:(UIInterfaceOrientation)orientation;
@end
然后在波纹管方法中,只需要编写此代码..
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
// return NO;
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
我希望这可以帮到你..
:)
答案 1 :(得分:3)
添加一个类变量
Bool isInLandsCapeOrientation;
在viewDidLoad
中将此标志设置为
isInLandsCapeOrientation = false;
添加以下功能
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if (!isInLandsCapeOrientation) {
return (UIInterfaceOrientationIsPortrait(interfaceOrientation));
}else {
return (UIInterfaceOrientationIsLandscape(interfaceOrientation));
}
}
要将方向从纵向更改为横向,请在按钮操作
上进行 - (IBAction)changeOrientationButtonPressed:(UIButton *)sender
{
isInLandsCapeOrientation = true;
UIViewController *viewController = [[UIViewController alloc] init];
[self presentModalViewController:viewController animated:NO];
[self dismissModalViewControllerAnimated:NO];
}
这对我来说很好。
答案 2 :(得分:1)
要将方向纵向模式更改为横向模式,请使用此代码
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
使用此代码以编程方式更改方向...
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
答案 3 :(得分:0)
该文档将orientation属性描述为只读,因此如果它有效,我不确定您将来可以依赖它(除非Apple做了聪明的事情并改变了它;强制方向改变无论用户当前如何握住他们的设备,都是如此明显的功能需求。)
作为替代方案,在viewDidLoad中插入的以下代码将成功(并且有点奇怪)强制方向(假设您已经修改过,您应该使用AutorotateToInterfaceOrientation):
if (UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation]))
{
UIWindow *window = [[UIApplication sharedApplication] keyWindow];
UIView *view = [window.subviews objectAtIndex:0];
[view removeFromSuperview];
[window addSubview:view];
}
显然,如果用户当前正在以纵向方向握住他们的设备(这可能是因为您的shouldAutorotateToInterfaceOrientation
仅设置为横向设置,并且如果用户使用此例程将其转换为横向设置,则会执行此操作将他们的设备保持在纵向模式)。如果您的UIDeviceOrientationIsPortrait
设置为仅限肖像,则您只需将UIDeviceOrientationIsLandscape
与shouldAutorotateToInterfaceOirentation
交换。
出于某种原因,从主窗口中删除视图然后重新添加它会强制它查询shouldAutorotateToInterfaceOrientation
并正确设置方向。鉴于这不是Apple批准的方法,也许应该避免使用它,但它适用于我。你的旅费可能会改变。但这也指其他技术。校验
SO discussion
答案 4 :(得分:0)
如果您只想在横向更改特定视图..那么您可以在其viewDidLoad中尝试以下内容
float angle = M_PI / 2;
CGAffineTransform transform = CGAffineTransformMakeRotation(angle);
[ [self.view] setTransform:transform];