欢迎来到天天文库
浏览记录
ID:16198910
大小:31.50 KB
页数:3页
时间:2018-08-08
《ios 屏幕旋转响应函数的缺点与窗口大小位置调整,以及解决办法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、iOS(iPhone/iPad) 屏幕旋转响应函数的缺点与窗口大小位置调整,以及解决办法Howard2013-05-171,UIViewController响应屏幕旋转的缺点:(1)旋转之前响应的操作缺点:-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientationduration:(NSTimeInterval)duration;在这里面处理窗口控件大小位置调整,最大的问题就是不能通过self.view.frame 获取布局区域。因为这时获取到的是旋转前的,
2、而不是旋转后的。(2)旋转之后响应的操作缺点:-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation;在这里处理窗口控件大小位置调整,最大的问题就是不知道目标转向,就是旋转后到底是横屏还是竖屏。(3)上述两者结合的缺点:有人可能会迫不及待地说增加一个成员变量在willRotateToInterfaceOrientation记住目标转向toInterfaceOrientation,然后在didRotateFromInterfaceOrientatio
3、n实现调整。UIViewController多了,每个增加那么一个成员变量不觉得累赘吗?2,解决方法(1)在旋转之前的willRotateToInterfaceOrientation里面实现调整,但是目标布局区域不是通过self.view.frame来获取,而是通过本人自定义函数getClientRect来实现。举例://Howard2013-05-07旋转之前的操作(仔细看了,不需要用到 didRotateFromInterfaceOrientation )-(void)willRotateToInterfaceOrientation:(UIInterfaceOrie
4、ntation)toInterfaceOrientationduration:(NSTimeInterval)duration{//先判断是否有效转向 if(UIDeviceOrientationIsValidInterfaceOrientation(toInterfaceOrientation)) { //参数表示是否横屏,这里我只需要知道屏幕方向就可以提前知道目标区域了! [selfsetCtrlPos:UIInterfaceOrientationIsLandscape(toInterfaceOrientation)]; }}//这
5、个用来实现窗口空间大小位置调整-(void)setCtrlPos:(BOOL)isHorz{ CGRectrcClient=getClientRect(isHorz); //其他控件根据这个rcClient来调整位置大小}//下面这个函数的好处在于,获取到的布局区域不会随着某某UIViewController的self.view.frame来改变,只与屏幕转向有关,与UIViewController无关。//可以根据横屏还是竖屏,提前预知目标窗口区域大小//不要看多了这么一整个函数,但是给多个UIViewController调用就很方便了。//这
6、一个函数,本人丢到自定义的公共文件去实现。当做全局函数,一般用global.h来声明接口,在global.m实现。CGRectgetClientRect(BOOLisHorz){ BOOLisStatusBarHidden=[[UIApplicationsharedApplication]isStatusBarHidden]; //判断屏幕顶部有没状态栏出现 CGRectrcScreen=[[UIScreenmainScreen]bounds];//这个不会随着屏幕旋转而改变 intstatus_height=isStatusBarHidden?0:20;
7、 CGRectrcClient=rcScreen; if(isHorz) { rcClient.size.width-=status_height; } else { rcClient.size.height-=status_height; } CGRectrcArea=rcClient; if(isHorz) { rcArea.size.width=MAX(rcClient.size.width,rcClient.size.height); rcArea.s
此文档下载收益归作者所有