美文网首页
swift:根据机型适配屏幕(基本数据类型的链式调用)

swift:根据机型适配屏幕(基本数据类型的链式调用)

作者: LiYaoPeng | 来源:发表于2018-07-26 20:08 被阅读0次

    以后你可以这么适配了~

    实现Int,CGFloat类型链式调用,以适配不同机型

    let isScrollEnabled = true.i5(false).ix(true).ipad(false)
    let leftMargin = 10.i5(50).ix(100).ipad(1000)
    

    1. 获取机型

    // MARK: - 判断 机型
    let isiPhone5 = UIDevice.isiPhone5()
    let isiPhone6 = UIDevice.isiPhone6()
    let isiPhone6BigModel = UIDevice.isiPhone6BigMode()
    let isiPhone6Plus = UIDevice.isiPhone6Plus()
    let isiPhone6PlusBigMode = UIDevice.isiPhone6PlusBigMode()
    let isiPhoneX = UIDevice.isiPhoneX()
    let isIpad = UIDevice.isAiPad()
    
    // MARK: - 系统类型
    let kisiOS11 = UIDevice.isiOS11()
    let kisiOS10 = UIDevice.isiOS10()
    let kisiOS9 = UIDevice.isiOS9()
    let kisiOS8 = UIDevice.isiOS8()
    
    extension UIDevice {
    
        func Version()->String{
    
            let appVersion: String = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
            return appVersion
        }
    
    
        @objc public class func isiPhoneX() -> Bool {
            if (UIScreen.main.currentMode?.size.equalTo(CGSize.init(width: 1125, height: 2436)))! {
                return true
            }
            return false
        }
        
        public class func isiPhone6PlusBigMode() -> Bool {
            if (UIScreen.main.currentMode?.size.equalTo(CGSize.init(width: 1125, height: 2001)))! {
                return true
            }
            return false
        }
        
        public class func isiPhone6Plus() -> Bool {
            if (UIScreen.main.currentMode?.size.equalTo(CGSize.init(width:1242, height: 2208)))! {
                return true
            }
            return false
        }
    
        public class func isiPhone6BigMode() -> Bool{
            if (UIScreen.main.currentMode?.size.equalTo(CGSize.init(width: 320, height: 568)))! {
                return true
            }
            return false
        }
    
        public class func isiPhone6() -> Bool {
            if (UIScreen.main.currentMode?.size.equalTo(CGSize.init(width:750, height: 1334)))! {
                return true
            }
            return false
        }
        
        public class func isiPhone5() -> Bool {
            if (UIScreen.main.currentMode?.size.equalTo(CGSize.init(width: 640, height: 1136)))! {
                return true
            }
            return false
        }
        
        public class func isiOS11() -> Bool {
            if #available(iOS 11.0, *) {
                return true
            } else {
                return false
            }
        }
        
        public class func isiOS10() -> Bool {
            if #available(iOS 10.0, *) {
                return true
            } else {
                return false
            }        
        }
        
        public class func isiOS9() -> Bool {
            if #available(iOS 9.0, *) {
                return true
            } else {
                return false
            }
        }
        
        public class func isiOS8() -> Bool {
            if #available(iOS 8.0, *) {
                return true
            } else {
                return false
            }
        }
        
        public class func isAiPad() -> Bool {
            if UIDevice.current.userInterfaceIdiom == UIUserInterfaceIdiom.pad {
                return true
            }
            return false
        }
    }
    

    2. 给基本数据类型添加分类

    Int

    extension NSInteger {
        /// iphone 5 上的大小
        /// 🌶 《*注意运算顺序 -60.i5(-30) 等价于 -(60.i5(-30)) 结果为 -(-30) 或者 -60》
        ///
        /// - Parameter size: iphone 5 上的大小
        /// - Returns: isiPhone5 ? size : CGFloat(self)
        func i5(_ size: CGFloat) -> CGFloat {
            return isiPhone5 ? size : CGFloat(self)
        }
        
        /// iphone 6 放大模式上的大小
        /// 🌶 《*注意运算顺序 -60.i6BigModel(-30) 等价于 -(60.i6BigModel(-30)) 结果为 -(-30) 或者 -60》
        ///
        /// - Parameter size: iphone 6 放大模式 上的大小
        /// - Returns: isiPhone6BigModel ? size : CGFloat(self)
        func i6BigModel(_ size: CGFloat) -> CGFloat {
            return isiPhone6BigModel ? size : CGFloat(self)
        }
        
        /// iphone 6p 放大模式上的大小
        /// 🌶 《*注意运算顺序 -60.i6PBigModel(-30) 等价于 -(60.i6PBigModel(-30)) 结果为 -(-30) 或者 -60》
        ///
        /// - Parameter size: iphone 6p 放大模式 上的大小
        /// - Returns: isiPhone6PlusBigMode ? size  : CGFloat(self)
        func i6PBigModel(_ size: CGFloat) -> CGFloat {
            return isiPhone6PlusBigMode ? size : CGFloat(self)
        }
        
        /// iphone x 上的大小
        /// 🌶 《*注意运算顺序 -60.ix(-30) 等价于 -(60.ix(-30)) 结果为 -(-30) 或者 -60》
        ///
        /// - Parameter size: iphone x 上的大小
        /// - Returns: isiPhoneX ? size / 2.0 : CGFloat(self)
        func ix(_ size: CGFloat) -> CGFloat {
            return isiPhoneX ? size : CGFloat(self)
        }
        
        /// ipad
        /// 🌶 《*注意运算顺序 -60.ipad(-30) 等价于 -(60.ipad(-30)) 结果为 -(-30) 或者 -60》
        ///
        /// - Parameter size: ipad 上的大小
        /// - Returns: isIpad ? size : CGFloat(self)
        func ipad(_ size: CGFloat) -> CGFloat {
            return isIpad ? size : CGFloat(self)
        }
        
        /// 比例缩放 width
        ///
        /// - Parameter size: origin width
        /// - Returns: 比例缩放后的 width 没有除以2.0
        func scaleW() -> CGFloat {
            return (screenWidth / 375 * CGFloat(self))
        }
        /// 比例缩放 height result没有除以2.0
        ///
        /// - Parameter size: origin height
        /// - Returns: 比例缩放后的 height 没有除以2.0
        func scaleH() -> CGFloat {
            return (screenHeight / 667 * CGFloat(self))
        }
    }
    

    CGFloat

    ///
    extension CGFloat {
        
        /// iphone 5 上的大小
        /// 🌶 《*注意运算顺序 -60.i5(-30) 等价于 -(60.i5(-30)) 结果为 -(-30) 或者 -60》
        ///
        /// - Parameter size: iphone 5 上的大小
        /// - Returns: isiPhone5 ? size : self
        func i5(_ size: CGFloat) -> CGFloat {
            return isiPhone5 ? size : self
        }
        
        /// iphone 6 放大模式上的大小
        /// 🌶 《*注意运算顺序 -60.i6BigModel(-30) 等价于 -(60.i6BigModel(-30)) 结果为 -(-30) 或者 -60》
        ///
        /// - Parameter size: iphone 6 放大模式 上的大小
        /// - Returns: isiPhone6BigModel ?  : self
        func i6BigModel(_ size: CGFloat) -> CGFloat {
            return isiPhone6BigModel ? size : self
        }
        
        /// iphone 6p 放大模式上的大小
        /// 🌶 《*注意运算顺序 -60.i6PBigModel(-30) 等价于 -(60.i6PBigModel(-30)) 结果为 -(-30) 或者 -60》
        ///
        /// - Parameter size: iphone 6p 放大模式 上的大小
        /// - Returns: isiPhone6PlusBigMode ? size : self
        func i6PBigModel(_ size: CGFloat) -> CGFloat {
            return isiPhone6PlusBigMode ? size : self
        }
        
        /// iphone x上的大小
        /// 🌶 《*注意运算顺序 -60.ix(-30) 等价于 -(60.ix(-30)) 结果为 -(-30) 或者 -60》
        ///
        /// - Parameter size: iphone x 上的大小
        /// - Returns: isiPhoneX ? size  : self
        func ix(_ size: CGFloat) -> CGFloat {
            return isiPhoneX ? size : self
        }
        
        /// ipad 上的大小
        /// 🌶 《*注意运算顺序 -60.ipad(-30) 等价于 -(60.ipad(-30)) 结果为 -(-30) 或者 -60》
        ///
        /// - Parameter size: ipad 上的大小
        /// - Returns: isIpad ? size : self
        func ipad(_ size: CGFloat) -> CGFloat {
            return isIpad ? size : self
        }
        
        
        /// 比例缩放 width
        ///
        /// - Parameter size: origin width
        /// - Returns: 比例缩放后的 width 没有除以2.0
        func scaleW() -> CGFloat {
             return (screenWidth / 375 * self)
        }
        /// 比例缩放 height
        ///
        /// - Parameter size: origin height
        /// - Returns: 比例缩放后的 height 没有除以2.0
        func scaleH() -> CGFloat {
            return (screenHeight / 667 * self)
        }
    }
    
    

    BOOL

    
    extension Bool {
        /// iphone 5 上的大小
        ///
        /// - Parameter size: iphone 5 上的大小
        /// - Returns: isiPhone5 ? size : self
        func i5(_ size: Bool) -> Bool {
            return isiPhone5 ? size : self
        }
        
        /// iphone 6 放大模式上的大小
        ///
        /// - Parameter size: iphone 6 放大模式 上的大小
        /// - Returns: isiPhone6BigModel ? size : self
        func i6BigModel(_ size: Bool) -> Bool {
            return isiPhone6BigModel ? size : self
        }
        
        /// iphone 6p 放大模式上的大小
        ///
        /// - Parameter size: iphone 6p 放大模式 上的大小
        /// - Returns: isiPhone6PlusBigMode ? size  : self
        func i6PBigModel(_ size: Bool) -> Bool {
            return isiPhone6PlusBigMode ? size : self
        }
        
        /// iphone x 上的大小
        ///
        /// - Parameter size: iphone x 上的大小
        /// - Returns: isiPhoneX ? size / 2.0 : self
        func ix(_ size: Bool) -> Bool {
            return isiPhoneX ? size : self
        }
        
        /// ipad
        ///
        /// - Parameter size: ipad 上的大小
        /// - Returns: isIpad ? size : self
        func ipad(_ size: Bool) -> Bool {
            return isIpad ? size : self
        }
    }
    

    相关文章

      网友评论

          本文标题:swift:根据机型适配屏幕(基本数据类型的链式调用)

          本文链接:https://www.haomeiwen.com/subject/qykimftx.html