我需要在横向模式下显示UIAlertView。我尝试了很明显,设置在willPresentAlertView:
委托方法变换无济于事:强制UIAlertView进入横向模式
-(void) willPresentAlertView:(UIAlertView *)alertView {
alertView.transform = CGAffineTransformMakeRotation(M_PI_2);
}
关于如何解决此问题有什么建议?
我需要在横向模式下显示UIAlertView。我尝试了很明显,设置在willPresentAlertView:
委托方法变换无济于事:强制UIAlertView进入横向模式
-(void) willPresentAlertView:(UIAlertView *)alertView {
alertView.transform = CGAffineTransformMakeRotation(M_PI_2);
}
关于如何解决此问题有什么建议?
您是否在didPresentAlertView
中尝试过?
- (void)didPresentAlertView:(UIAlertView *)alertView
{
// UIAlertView in landscape mode
[UIView beginAnimations:@"" context:nil];
[UIView setAnimationDuration:0.1];
alertView.transform = CGAffineTransformRotate(alertView.transform, 3.14159/2);
[UIView commitAnimations];
}
如果您使用的是UIViewController
,它应该会自动旋转。 忘了在shouldAutorotateToInterfaceOrientation
中忘记将所需的方向还原YES
?
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return YES; /* auto rotate always */
}
显示警报的视图的方向是什么?我遇到了同样的问题,我尝试在横向视图中显示UIAlertView,但始终以纵向显示。所以,我强制的状态栏的方向:
[[UIApplication sharedApplication] setStatusBarOrientation:theOrientation];
这对我有效。
最近我一直在努力解决相同的问题。对我而言,解决方案使用的是UIAlertController
- 涵盖旧版本的UIAlertview
和UIActionsheet
。
UIAlertController
,在那里你必须重载方法viewWillAppear
和viewWillDisappear
,例如像在波纹管专用。AlertViewController.h
#import <UIKit/UIKit.h>
@interface AlertViewController : UIAlertController
@end
AlertViewController.m
#import "AlertViewController.h"
@interface AlertViewController()
@end
@implementation AlertViewController
- (void) viewWillAppear:(BOOL)animated {
[self.view setTransform:CGAffineTransformMakeRotation(M_PI_2)];
}
- (void) viewWillDisappear:(BOOL)animated {
[self.view setHidden:YES];
}
...
实现用于表示在你需要警报视图方法。警报窗口出现
(无效){showInfoAlertView
AlertViewController *alert = [AlertViewController alertControllerWithTitle:@"My Alert" message:@"This is an alert." preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
[alert addAction:ok];
[self presentViewController:alert animated:NO completion:nil];
}
之前,设置在顶部的当前窗口显示。如果不这样做,您可以看到警报窗口的旋转动画。
-(void) willPresentAlertView:(UIAlertView *)alertView {
[UIView setAnimationsEnabled:NO];
self.view.window.windowLevel = 2003;
}
旋转警报窗口警报窗口旋转
-(void)didPresentAlertView:(UIAlertView *)alertView
{
UIWindow * alertWindow = alertView.window;
alertWindow.transform = CGAffineTransformMakeRotation(M_PI/2);
alertWindow.bounds = CGRectMake(0, 0, SCREEN_HEIGHT,SCREEN_WIDTH);
alertWindow.center = CGPointMake(SCREEN_WIDTH/2, SCREEN_HEIGHT/2);
[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(showLandscapeAlertView) userInfo:nil repeats:NO];
}
后,移动当前窗口后面。
-(void)showLandscapeAlertView {
self.view.window.windowLevel = 0;
[UIView setAnimationsEnabled:YES];
}
尽管此代码可能有助于解决这个问题并没有解释_why_和/或_how_它回答了这个问题,提供这个额外的上下文将显着提高它的长期教育价值,请编辑你的答案以增加解释,包括什么限制和假设适用。 – 2016-10-19 16:31:42
作品像魅力! – SamuelChan 2017-06-23 08:06:45
这可能会在'willPresentAlertView'中工作,但我以前没有尝试过。 – 2012-02-06 13:13:52
它可以在didPresentAlertView上工作:但它具有首先在错误位置显示视图的不良影响。 – cfischer 2012-02-06 13:26:31
它在'willPresentAlertView'中工作吗?如果可以的话,那可能会消除动画效果。 – 2012-02-06 13:27:57