• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

swift 屏幕的翻转 + 状态栏(statusBar)的隐藏

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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,width: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,width: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{ } } }

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
[Swift]LeetCode1131.绝对值表达式的最大值|MaximumofAbsoluteValueExpression ...发布时间:2022-07-14
下一篇:
Swift:基础语法(三)发布时间:2022-07-14
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap