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{ } } }
  • 相关阅读:
    -bash: fork: Cannot allocate memory 问题的处理
    Docker top 命令
    docker常见问题修复方法
    The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
    What's the difference between encoding and charset?
    hexcode of é î Latin-1 Supplement
    炉石Advanced rulebook
    炉石bug反馈
    Sidecar pattern
    SQL JOIN
  • 原文地址:https://www.cnblogs.com/Bob-blogs/p/7737841.html
Copyright © 2011-2022 走看看