是否可以横向旋转UIAlertController(和Alert)?

我正在编辑一个应用程序,我在其中添加了一个新的UIViewController以在一个布局中配置多人游戏。

我为每个玩家添加了两个按钮(顶部按钮,机器人按钮)。 每个按钮在屏幕上生成一个警报(记住它是横向的),但问题是,玩家2没有看到警报旋转,我的意思是,警报应该以他的方向显示在我面前。

有没有办法做到这一点? 我想为播放器2旋转警报,不会看到警报的信息。

这里有我的警报代码:

@IBAction func ShowAlert(){ let message = "Test" let alert = UIAlertController(title: title, message: message, preferredStyle: .Alert) let action = UIAlertAction(title: "OK", style: .Default, handler: nil) alert.addAction(action) presentViewController(alert, animated: true, completion: nil) } 

这是一种旋转警报控制器视图的方法,尽管它并不完美。 控制器试图根据方向呈现,我发现尝试在呈现之前对其进行转换是不成功的。

为了最初看不到“不正确”的方向,您必须将警报设置为hidden ,然后在“显示”后使其可见。

 let alert // setup alert.view.hidden = true; [self presentViewController:c animated:YES completion:^{ alert.view.transform = CGAffineTransformMakeRotation(M_PI); alert.view.hidden = false; }]; 

我遇到的唯一一个突出问题是,在用户与警报交互后,它会闪回到初始转换(取决于方向)。 我目前还没有找到解决方案,但如果我做的话会更新。


或者,使用自定义“警报”可以解决此问题,因为您可以更好地控制其视图。 这可能是更可靠的方法。

这是我的解决方案。 presentViewController没有动画,以避免出现警报控制器时的闪存。

 [self presentViewController:alert animated:NO completion:^{ [alertController.view setTransform: CGAffineTransformMakeRotation(M_PI_2)]; }]; 

然后创建一个名为UIAlertController+Orientation的UIAlertController类,隐藏viewWillDisappear的视图以避免在关闭警报控制器时闪回。

 #import "UIAlertController+Orientation.h" @implementation UIAlertController (Orientation) - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [self.view setHidden:YES]; } - (BOOL) shouldAutorotate { return NO; } @end