zoukankan      html  css  js  c++  java
  • 旋转实现iOS(iPhone/iPad) 屏幕旋转响应函数的缺点与窗口大小位置调整,以及解决办法

    本文纯属个人见解,是对前面学习的总结,如有描述不正确的地方还请高手指正~

        1,UIViewController响应幕屏旋转的点缺:

        (1)旋转之前响应的操纵点缺:

        - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration;

        在这里头理处窗口控件巨细置位整调,最大的题问就是不能通过 self.view.frame 取获局布区域。因为这时取获到的是旋转前的,而不是旋转后的

        

        (2)旋转以后响应的操纵点缺:

        - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation;

        在这里理处窗口控件巨细置位整调,最大的题问就是不道知目标转向,就是旋转后是底到横屏还是竖屏

        

        (3)上述两者合结的点缺:

        有人可能会急不可待地说加增一个成员变量在willRotateToInterfaceOrientation住记目标转向toInterfaceOrientation,然后在didRotateFromInterfaceOrientation实现整调。

        UIViewController多了,个每加增那么一个成员变量不觉得累坠吗?

        

        2,解决方法

        (1)在旋转之前的willRotateToInterfaceOrientation里头实现整调,但是目标局布区域不是通过self.view.frame来取获,而是通过本人自定义函数getClientRect来实现。

        举例:

        //Howard 2013-05-07 旋转之前的操纵(细心看了,不需要用到 didRotateFromInterfaceOrientation )
    - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
    {

        //先判断否是有效转向
        if( UIDeviceOrientationIsValidInterfaceOrientation( toInterfaceOrientation ) )
        {

               //参数示表否是横屏,这里我只要要道知幕屏方向就能够提早道知目标区域了!
            [self setCtrlPos: UIInterfaceOrientationIsLandscape( toInterfaceOrientation) ];

         

            }
    }

        

        //这个用来实现窗口空间巨细置位整调

        -(void)setCtrlPos:(BOOL)isHorz

        {

        每日一道理
    在个每人心中,都曾停留过那些值得怀念的人,也许还在,也许早已消逝,在茫茫人海中丢失,于是,那份怀念便得凄凉,因为模糊的记忆中只剩下一个“空壳”,没有什么,甚至连自己的心都装不下,时间把一切抹平,也把当日的泪水封锁,因为已经没有,怀念只是悲凉!

         CGRect rcClient = getClientRect( isHorz );

                  //其他控件根据这个rcClient来整调置位巨细

        }

        

        //上面这个函数的处好在于,取获到的局布区域不会随着 某某UIViewController的self.view.frame来转变,只与幕屏转向有关,与UIViewController关无。

        //可以根据横屏还是竖屏,提早预知目标窗口区域巨细

        //不要看多了这么一个整函数,但是给多个UIViewController调用就很方便了。

        //这一个函数,本人丢到自定义的公共文件去实现。当作全局函数,一般用global.h来声明口接,在global.m实现。

        CGRect getClientRect( BOOL isHorz)
    {
        BOOL isStatusBarHidden = [[ UIApplication sharedApplication ]isStatusBarHidden ]; //判断幕屏顶部有没状态栏涌现
        CGRect rcScreen = [[UIScreen mainScreen] bounds];//这个不会随着幕屏旋转而转变
        int status_height = isStatusBarHidden ? 0 :20;
        CGRect rcClient = rcScreen;
        if( isHorz )
        {
            rcClient.size.width -= status_height;
        }
        else
        {
            rcClient.size.height -= status_height;
        }
        CGRect rcArea = rcClient;
        if( isHorz )
        {
            rcArea.size.width = MAX(rcClient.size.width,rcClient.size.height);
            rcArea.size.height = MIN(rcClient.size.width,rcClient.size.height);
        }
        
        return rcArea;
    }

        

        

        

        

    文章结束给大家分享下程序员的一些笑话语录:  一边用着越狱的ip,一边拜乔帮主的果粉自以为是果粉,其实在乔帮主的眼里是不折不扣的叛徒。

  • 相关阅读:
    Docker系列——InfluxDB+Grafana+Jmeter性能监控平台搭建(一)
    Centos7网络配置——设置固定ip
    Fiddler扩展——自定义列数据&Tunnel to 443解决办法
    Jmeter二次开发——自定义函数
    net5学习笔记---依赖注入
    Spring Cloud Alibaba系列之分布式服务组件Dubbo
    Spring5.0源码学习系列之事务管理概述
    C# 无需管理员权限提示,操作C盘文件
    WPF 屏幕点击的设备类型
    WPF Button MouseDown事件
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3065657.html
Copyright © 2011-2022 走看看