zoukankan      html  css  js  c++  java
  • swift 屏幕的翻转 + 状态栏(statusBar)的隐藏

    1.状态栏的隐藏

      这个问题是基于 UIApplication.shared.isStatusBarHidden = true; 调用居然是无效的……

      现在写下自己的代码,用来备忘吧……

      1.首先需要复写一个 hidden 的这个属性 ,然后调用 setNeedsStatusBarAppearanceUpdate() 方法,

      这样使用又觉得麻烦,所以 又多设置了一个变量 ,让使用更简单

      override var prefersStatusBarHidden: Bool {
            return self.isStatusBarHidden
        }
        
        var isStatusBarHidden = false {
            
            didSet{
                self.setNeedsStatusBarAppearanceUpdate()
            }
        }
        

     在使用的地方调用

    self.isStatusBarHidden = true
    //      self.isStatusBarHidden = false;

    2.屏幕的翻转:

     首先写下试用与 iphone 和 ipad 的

     我使用的是transfrone 旋转 视图view ,这样的前提是 这个view 是present 出来的,不能用 navigationController 了

    //定义枚举
    enum ScreenOrientation :Int {
        
        case portrait = 1;
        case landscape = 2
    }
    
    // 定义常量
    let scrw = UIScreen.main.bounds.size.width;
    let scrh = UIScreen.main.bounds.size.height;
    
    
    //定义方法
     func tranformView() -> Void {
            
            if self.orientation == .landscape {
                self.orientation = .portrait
            }else{
                self.orientation = .landscape;
            }
           
            if self.orientation == .landscape {
                
                self.isStatusBarHidden = true
                
                UIView.animate(withDuration: deviceChangeOrientationTimeIntravel, animations: {
                    
                    self.view.transform = CGAffineTransform.init(rotationAngle: CGFloat(Double.pi / 2))
                    self.view.bounds = CGRect(x:0,y:0,scrh,height:scrw);
                    self.viewWillLayoutSubviews();
                    self.view.layoutIfNeeded();
                }) { (isFinish) in
               
                }
                
            }else{
    
                self.isStatusBarHidden = false;
                
                UIView.animate(withDuration: deviceChangeOrientationTimeIntravel, animations: {
                    
                    self.view.transform = CGAffineTransform.init(rotationAngle: CGFloat(0))
                    self.view.bounds = CGRect(x:0,y:0,scrw,height:scrh);
                    self.viewWillLayoutSubviews();
                    self.view.layoutIfNeeded();
                    
                }) { (isFinish) in
          
                }
            }
        }

     简单易懂,应该是可以使用了……

    网上也找了 这个方法,但是使用的时候,只有在iphone 上用,ipad 使用无效

     /*
    创建个 extension
    使用这个 扩展 要在 appdelegate 文件中 添加代码: var blockRotation: Bool = false */
    extension AppDelegate{
    func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow
    ?) -> UIInterfaceOrientationMask { if self.blockRotation == true{ return UIInterfaceOrientationMask.all; }else{ return UIInterfaceOrientationMask.portrait; } }
    }

    调用的时候


    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    //横屏 @objc func hengp()->Void{ appDelegate.blockRotation = true let value = UIInterfaceOrientation.landscapeLeft.rawValue UIDevice.current.setValue(value, forKey: "orientation"); } //竖屏 @objc func shup() -> Void{ appDelegate.blockRotation = false let value = UIInterfaceOrientation.portrait.rawValue UIDevice.current.setValue(value, forKey: "orientation") } //切换横竖屏 执行的代理方法 override func willRotate(to toInterfaceOrientation: UIInterfaceOrientation, duration: TimeInterval) { print("方向即将改变 (toInterfaceOrientation)"); } override func didRotate(from fromInterfaceOrientation: UIInterfaceOrientation) { print("方向改变完成 ");
    /* 在这里更新 约束 和 frame */
    UIView.animate(withDuration: deviceChangeOrientationTimeIntravel, animations: { self.viewWillLayoutSubviews(); self.view.layoutIfNeeded(); }) { (isFinish) in if isFinish == true{ } } }
  • 相关阅读:
    telnet命令找不到问题
    hive向表中执行insert语句报错问题
    SharePoint 2010 日期控件(DateTimeControl)的用法
    SharePoint 2010 启用InfoPath支持
    Sharepoint 2010 根据用户权限隐藏Ribbon菜单
    Sharepoint 2010 使用feature部署文件
    SharePoint 2010 查询不以某个字符开头的数据[How to Create a SharePoint “Does Not Begin With” Filtered List View]计算栏的妙用
    SharePoint 2010 栏计算经验收集
    SharePoint 2010 更加列表栏的值显示不同的背景颜色
    SharePoint 2010 使用SP.UI.ModalDialog.showModalDialog(options)对话框框架传值
  • 原文地址:https://www.cnblogs.com/Bob-blogs/p/7737841.html
Copyright © 2011-2022 走看看