iPhone之横竖屏与自动旋转
2016-03-12 01:30
417 查看
iPhone的自动旋转功能一共有三种方法:
使用自动调整属性处理旋转,利用系统自动生成的代码。
要想让系统自动实现旋转功能仅需要实现上面的代码,把return (interfaceOrientation == UIInterfaceOrientationPortrait)修改成为return OK即可。
修改后的代码为:
然后在使用自动调整属性设计界面(Apple+3),指定要支持的方向即可。
在使用模拟仿真器的时候,要让其自动旋转只需Apple+ ->(<-)即可。
在旋转是重构视图(即手动设置每一个控件的位置和大小,让其重新排列)
第一种方法基本上不需要编写代码,这种方法就需要写点代码了,毕竟重新设置每一个控件的坐标了嘛。例如:
在View中添加6个button,然后设定W和H分别为125和125,这样在横向的时候这三个button是会重叠的,因为在横向的时候Iphone 支持的显示像素为480x300,没有状态栏的情况下是480x320.(在纵向时候显示像素为320x460,没有状态栏的情况下是320x480)
现在就需要写代码重新排列这六个按钮了。首先声明变量,在IP_05AutosizeViewController.h中添加如下的代码:
然后在IP_05AutosizeViewController.m中,添加实现方法。
还需要修改- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation的代码:
修改后为:
然后在dealloc中释放资源:
到此代码部分搞定,然后就是连接控制器和视图了。然后Build and Go最终结果为:
切换视图
这种方法使用于比较复杂的界面,是需要分别设计横向模式和纵向模式,然后在使用的过程中自动切换。
首先定义输出口:(简单描述,设计两个视图,一个定义为landscape,一个是portrait,一个为320x460,一个为480x300,每一个输出口分别和每个视图中的按钮想关联)
还需要File’s Owner和两个View想关联:按住Ctrl将File’s Owner拖到Portrait上面,在弹出灰色菜单上选择Portrait同理选择Landscape,然后在按住Ctrl将File’s Owner拖到Landscape上面,在弹出的灰色菜单上选择View,让Landscape为自启动View。
方法的实现:
不要忘了在dealloc中释放资源。
因为在上面的代码中使用到了Core Graphics框架,因此要把该框架连接到该项目中,具体的方法是:在Resources上面点右键Add->Existing Frameworks,然后就是查找路径了。具体路径为:/Developer/Platforms /iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.2.1.sdk/System /Library/Frameworks/CoreGraphics.framework 这个路径是有点长不好找,记住不是在:/Developer/SDKs里面了。还有就是导入后会处理一个提示框, 不要Copy,Reference Type要选择Relative to Current SDK然后add就OK了。
例子中还有一个方法是对View中的按钮实现隐藏,具体方法为:
最后运行工程即可。
开始时候的图片:
旋转后并且按了Foo按钮后的图片:
使用自动调整属性处理旋转,利用系统自动生成的代码。
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations return (interfaceOrientation == UIInterfaceOrientationPortrait);//系统默认不支持旋转功能 }
要想让系统自动实现旋转功能仅需要实现上面的代码,把return (interfaceOrientation == UIInterfaceOrientationPortrait)修改成为return OK即可。
修改后的代码为:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations return OK; }
然后在使用自动调整属性设计界面(Apple+3),指定要支持的方向即可。
在使用模拟仿真器的时候,要让其自动旋转只需Apple+ ->(<-)即可。
在旋转是重构视图(即手动设置每一个控件的位置和大小,让其重新排列)
第一种方法基本上不需要编写代码,这种方法就需要写点代码了,毕竟重新设置每一个控件的坐标了嘛。例如:
在View中添加6个button,然后设定W和H分别为125和125,这样在横向的时候这三个button是会重叠的,因为在横向的时候Iphone 支持的显示像素为480x300,没有状态栏的情况下是480x320.(在纵向时候显示像素为320x460,没有状态栏的情况下是320x480)
现在就需要写代码重新排列这六个按钮了。首先声明变量,在IP_05AutosizeViewController.h中添加如下的代码:
#import <UIKit/UIKit.h> @interface IP_05AutosizeViewController : UIViewController { IBOutlet UIButton *button1; IBOutlet UIButton *button2; IBOutlet UIButton *button3; IBOutlet UIButton *button4; IBOutlet UIButton *button5; IBOutlet UIButton *button6; } @property (nonatomic,retain)UIView *button1; @property (nonatomic,retain)UIView *button2; @property (nonatomic,retain)UIView *button3; @property (nonatomic,retain)UIView *button4; @property (nonatomic,retain)UIView *button5; @property (nonatomic,retain)UIView *button6; @end
然后在IP_05AutosizeViewController.m中,添加实现方法。
@implementation IP_05AutosizeViewController @synthesize button1; @synthesize button2; @synthesize button3; @synthesize button4; @synthesize button5; @synthesize button6; -(void)willAnimateSecondHalfOfRotationFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation duration:(NSTimeInterval)duration { UIInterfaceOrientation to=self.interfaceOrientation; if(to == UIInterfaceOrientationPortrait || to == UIInterfaceOrientationPortraitUpsideDown) { button1.frame = CGRectMake(20, 20, 125, 125); button2.frame = CGRectMake(175, 20, 125, 125); button3.frame = CGRectMake(20, 168, 125, 125); button4.frame = CGRectMake(175, 168, 125, 125); button5.frame = CGRectMake(20, 315, 125, 125); button6.frame = CGRectMake(175, 315, 125, 125); } else { button1.frame = CGRectMake(20, 20, 125, 125); button2.frame = CGRectMake(20, 155, 125, 125); button3.frame = CGRectMake(177, 20, 125, 125); button4.frame = CGRectMake(177, 155, 125, 125); button5.frame = CGRectMake(328, 20, 125, 125); button6.frame = CGRectMake(328, 155, 125, 125); } }
还需要修改- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation的代码:
修改后为:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight); }
然后在dealloc中释放资源:
- (void)dealloc { [button1 release]; [button2 release]; [button3 release]; [button4 release]; [button5 release]; [button6 release]; [super dealloc]; }
到此代码部分搞定,然后就是连接控制器和视图了。然后Build and Go最终结果为:
切换视图
这种方法使用于比较复杂的界面,是需要分别设计横向模式和纵向模式,然后在使用的过程中自动切换。
首先定义输出口:(简单描述,设计两个视图,一个定义为landscape,一个是portrait,一个为320x460,一个为480x300,每一个输出口分别和每个视图中的按钮想关联)
//用于切换的两个View IBOutlet UIView *landscape; IBOutlet UIView *portrait; //Foo两个View中的Foo按钮 IBOutlet UIButton *landscapeFooButton; IBOutlet UIButton *portraitFooButton; //Bar两个View中的Bar按钮 IBOutlet UIButton *landscapeBarButton; IBOutlet UIButton *portraitBarButton;
还需要File’s Owner和两个View想关联:按住Ctrl将File’s Owner拖到Portrait上面,在弹出灰色菜单上选择Portrait同理选择Landscape,然后在按住Ctrl将File’s Owner拖到Landscape上面,在弹出的灰色菜单上选择View,让Landscape为自启动View。
方法的实现:
-(void)willAnimateFirstHalfOfRotationToInterfaceOrientation:(UIInterfaceOrientation)to duration:(NSTimeInterval)duration { if(to == UIInterfaceOrientationPortrait) { self.view = self.portrait; self.view.transform = CGAffineTransformIdentity; self.view.transform = CGAffineTransformMakeRotation(degressToRadian(0)); self.view.bounds = CGRectMake(0.0, 0.0, 320.0, 460.0); } else if (to == UIInterfaceOrientationLandscapeLeft) { self.view = self.landscape; self.view.transform = CGAffineTransformIdentity; self.view.transform = CGAffineTransformMakeRotation(degressToRadian(-90)); self.view.bounds = CGRectMake(0.0, 0.0, 460.0, 320.0); } else if (to == UIInterfaceOrientationPortraitUpsideDown) { self.view = self.portrait; self.view.transform = CGAffineTransformIdentity; self.view.transform = CGAffineTransformMakeRotation(degressToRadian(180)); self.view.bounds = CGRectMake(0.0, 0.0, 320.0, 460.0); } else if (to == UIInterfaceOrientationLandscapeRight) { self.view = self.landscape; self.view.transform = CGAffineTransformIdentity; self.view.transform = CGAffineTransformMakeRotation(degressToRadian(90)); self.view.bounds = CGRectMake(0.0, 0.0, 460.0, 320.0); } } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return YES; }
不要忘了在dealloc中释放资源。
因为在上面的代码中使用到了Core Graphics框架,因此要把该框架连接到该项目中,具体的方法是:在Resources上面点右键Add->Existing Frameworks,然后就是查找路径了。具体路径为:/Developer/Platforms /iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.2.1.sdk/System /Library/Frameworks/CoreGraphics.framework 这个路径是有点长不好找,记住不是在:/Developer/SDKs里面了。还有就是导入后会处理一个提示框, 不要Copy,Reference Type要选择Relative to Current SDK然后add就OK了。
例子中还有一个方法是对View中的按钮实现隐藏,具体方法为:
-(IBAction)buttonPressed:(id)sender { if(sender == portraitFooButton||sender == landscapeFooButton) { portraitFooButton.hidden=YES; landscapeFooButton.hidden=YES; } else { portraitBarButton.hidden=YES; landscapeBarButton.hidden=YES; } }
最后运行工程即可。
开始时候的图片:
旋转后并且按了Foo按钮后的图片:
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- 绝大部分 Android 手电筒应用需要大量权限
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 这些看似合法的 iPhone Lightning 数据线将劫持您的电脑
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 我的iPhone桌面
- 三种检测iPhone/iPad设备方向的方法
- js实现iPhone界面风格的单选框和复选框按钮实例
- 讲解iOS开发中基本的定位功能实现
- iOS中定位当前位置坐标及转换为火星坐标的方法
- js判断客户端是iOS还是Android等移动终端的方法
- iOS应用中UISearchDisplayController搜索效果的用法
- IOS开发环境windows化攻略