iOS开发——戏说旋屏
来源:互联网 发布:软件测试 量化 考核 编辑:程序博客网 时间:2024/04/30 09:56
横竖屏切换,视图乱了怎么办?
首先,我们必须了解一下下列4种状态,它们被用来描述设备旋转方向:
UIInterfaceOrientationLandscapeLeft
向左,即HOME键在右
UIInterfaceOrientationLandscapeRight
向右,即HOME键在左
UIInterfaceOrientationPortrait
正立,即HOME键在下
UIInterfaceOrientationPortraitUpsideDown
倒立,即HOME键在上
对于旋屏的处理,大致分为如下几种情况和思路:
也许,你不需要旋屏支持,而希望锁定屏幕
- -(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
- {
- return NO;
- }
也许,你需要支持旋屏,或者支持部分方向的旋屏
- -(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
- return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
- }
也许,你的view有张背景图,旋屏时系统帮助你拉伸了图片,但是却没有管你的其它部件,比如button,你希望直接改变button的大小和位置
- -(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
- {
- if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation)) {
- NSLog(@"现在是竖屏");
- [btn setFrame:CGRectMake(213, 442, 340, 46)];
- }
- if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) {
- NSLog(@"现在是横屏");
- [btn setFrame:CGRectMake(280, 322, 460, 35)];
- }
- }
也许,你并不希望用绝对坐标去约束控件,而是希望让它通过旋转自己适应屏幕的旋转
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- // Do any additional setup after loading the view, typically from a nib.
- UIDevice *device = [UIDevice currentDevice];
- [device beginGeneratingDeviceOrientationNotifications];
- //利用 NSNotificationCenter 获得旋转信号 UIDeviceOrientationDidChangeNotification
- NSNotificationCenter *ncenter = [NSNotificationCenter defaultCenter];
- [ncenter addObserver:self selector:@selector(orientationChanged) name:UIDeviceOrientationDidChangeNotification object:device];
- }
- - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
- {
- return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
- }
- -(void)rotation_btn:(float)n
- {
- UIButton *robtn = self.btn;
- robtn.transform = CGAffineTransformMakeRotation(n*M_PI/180.0);
- }
- -(void)orientationChanged
- {
- UIDeviceOrientation orientaiton = [[UIDevice currentDevice] orientation];
- switch (orientaiton) {
- caseUIDeviceOrientationPortrait:
- [self rotation_btn:0.0];
- break;
- caseUIDeviceOrientationPortraitUpsideDown:
- [self rotation_btn:90.0*2];
- break;
- caseUIDeviceOrientationLandscapeLeft:
- [self rotation_btn:90.0*3];
- break;
- caseUIDeviceOrientationLandscapeRight:
- [self rotation_btn:90.0];
- break;
- default:
- break;
- }
- }
也许,你需要autoresizesSubviews = YES
也许,你希望横竖屏有不同的布局效果,需要准备2份Subview,在不同状态去替换
当然不要忘记,需要调节设定图示中的1、2处,
来帮助我们完成自己想要的适应效果。Example 动画呈现的很清晰,^_^ 我就不再啰嗦了。
0 0
- iOS开发——戏说旋屏
- iOS开发——戏说旋屏
- iOS开发——戏说旋屏
- iOS开发——戏说旋屏
- 戏说报表开发
- 戏说语义网——简介
- 戏说Linux——unix和Linux发展史
- 读新闻,学英语—戏说国外新闻网站(转)
- 猎狗的故事—戏说管理(转帖)
- ios开发——旋屏控制
- 戏说CAD开发 DWG文件格式浅析
- 戏说CAD开发 DWG文件格式浅析
- iOS开发—生命周期
- IOS开发—NSDateFormatter
- IOS开发—NSTimer
- IOS开发—截屏
- IOS开发—截屏
- iOS开发—本地化
- 初体验wxWidgets
- excel写进数据库
- c++学习笔记5,多重继承中派生类的构造函数与析构函数的调用顺序(二)
- 系统底层的锁到底是个是东东
- GCC 4.7.0 开始支持 LTO(链接时优化)
- iOS开发——戏说旋屏
- 几个数据分析中常用到的excel函数
- iOS晒作业:涂鸦pdf
- flex 圆饼图的简单实现——xml数据
- LeetCode :Longest Palindromic Substring
- Objective-C ios7 ble-transfer code tree
- 函数指针——求数组最大值和和
- 做大“入口”生意的豌豆荚
- Linux内核学习笔记(一)CFS完全公平调度类