该示例是想在手机屏幕方向发生改变时重新定位视图(这里是一个button)
1.创建一个View—based Application项目,并在View窗口中添加一个Round Rect Button视图,通过尺寸检查器设置其位置,然后单击View窗口右上角的箭头图标来旋转窗口方向,重新定位button,这两个位置随便定义,只要能区分在不同位置即可,记住这两个位置的数据,因为在代码里面会用到。
2.在.h头文件里面定一个UIButton,并添加两个方法,后面会解释这两个方法:
#import <UIKit/UIKit.h> @interface ChangeOrientation : UIViewController { IBOutlet UIButton *mybutton; } @property(nonatomic,retain)UIButton *mybutton; -(void)positionViews; -(IBAction)makeChange; @end
3.要向让手机支持所有旋转方向,必须修改自动生成的方法,让其return YES:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return YES; }
4.添加一个根据当前屏幕的方向改变button位置的方法,该方法在.h头文件定义过:
//根据当前的屏幕方向改变button的位置 -(void)positionViews{ UIInterfaceOrientation destorientation = self.interfaceOrientation; if (destorientation == UIInterfaceOrientationPortrait || destorientation == UIInterfaceOrientationPortraitUpsideDown) { mybutton.frame = CGRectMake(20, 20, 233, 37); }else{ mybutton.frame = CGRectMake(227, 243, 233, 37); } }
5.当屏幕正在旋转的时候需要处理如下事件,这样就可以调用前面定义的方法positionViews方法改变button的位置:
(补充:willAnimateFirstHalfOfRotationToInterfaceOrientation:事件是在View窗口开始旋转前促发)
//当屏幕旋转到一半的时候促发的方法 -(void)willAnimateSecondHalfOfRotationFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation duration:(NSTimeInterval)duration{ [self positionViews]; }
6.在窗口加载完毕后调用positionViews方法来定位当前屏幕方向的button的位置:
- (void)viewDidLoad { [self positionViews]; [super viewDidLoad]; }
7.添加一个button点击方法(该方法在.h头文件中定义过),当点击这个button的时候动态改变屏幕的方向,代码如下:
//点击button动态改变屏幕方向 -(IBAction)makeChange{ [[UIDevice currentDevice]setOrientation:UIInterfaceOrientationLandscapeLeft]; }