swift 分类

作者: 王大吉Rock | 来源:发表于2017-04-19 13:22 被阅读21次

UIView:

添加View的x,y,width,height,centerX,centerY,maxY,maxX属性

import UIKit

// 给UIView扩展一些方法
extension UIView {
    
    var x :CGFloat {
        set{
            var rect = self.frame
            rect.origin.x = newValue
            self.frame = rect
            
        }
        get{
            return self.frame.origin.x
        }
    }
    
    var y :CGFloat {
        set{
            var rect = self.frame
            rect.origin.y = newValue
            self.frame = rect
            
        }
        get{
            return self.frame.origin.y
        }
    }
    
    
    var width :CGFloat {
        set{
            var rect = self.frame
            rect.size.width = newValue
            self.frame = rect
            
        }
        get{
            return self.frame.size.width
        }
    }
    
    var height :CGFloat {
        set{
            var rect = self.frame
            rect.size.height = newValue
            self.frame = rect
            
        }
        get{
            return self.frame.size.height
        }
    }
    
    var centerX :CGFloat {
        set{
            var center = self.center
            center.x = newValue
            self.center = center
            
        }
        get{
            return self.center.x
        }
    }
    
    var centerY :CGFloat {
        set{
            var center = self.center
            center.y = newValue
            self.center = center
            
        }
        get{
            return self.center.y
        }
    }
    
    // 获取最大y值
    var maxY :CGFloat {
        get{
            return self.frame.maxY
        }
    }
    
    // 获取最大x值
    var maxX :CGFloat {
        get{
            return self.frame.maxX
        }
    }
    
    
}

UIDevice

APP相关信息:应用的版本,应用的名称
设备相关:获取设备的型号,设备UUID,获取设备名称(如iPhone:王伟的iPhone),系统版本号(iPhone,ipad,电视)的具体型号、手机电量

import UIKit

// 获取App相关的信息
let _infoDic =  Bundle.main.infoDictionary

extension UIDevice {
    
    // MARK: - App相关
    // 获取App的版本号
    var appVersion :String {
        
        guard let infoDic = _infoDic else {
            return "获取APP版本号失败"
        }
        
        guard let appVersion = infoDic["CFBundleShortVersionString"] as? String else {
            return "获取APP版本号失败"
        }
        return appVersion
    }
    
    // 获取App的build版本
    var appBuildVersion :String {
        
        guard let infoDic = _infoDic else {
            return "获取APP版本号失败"
        }
        
        guard let appBuildVersion = infoDic["CFBundleVersion"] as? String else {
            return "获取APP版本号失败"
        }
        return appBuildVersion
    }
    
    // 获取App的名称
    var appName :String {
        
        guard let infoDic = _infoDic else {
            return "获取APP版本号失败"
        }
        
        guard let appName = infoDic["CFBundleDisplayName"] as? String else {
            return "获取APP版本号失败"
        }
        return appName
    }
    
    
    
    // MARK: - 设备相关
    var appBatteryLevel :String {
        return "\(UIDevice.current.batteryLevel)"
    }
    
    
    
    // 获取设备的型号
    var deviceModel :String {
        return UIDevice.current.model
    }
    
    // 获取设备UUID
    var deviceUUID :String {
        
        guard let UUID = UIDevice.current.identifierForVendor?.uuidString else {
            return "获取设备唯一标识失败"
        }
        return UUID
    }
    
    // 获取设备名称(如iPhone:王伟的iPhone)
    var deviceName :String {
        return UIDevice.current.name
    }
    
    // 获取系统版本号
    var sysVersion :String {
        return UIDevice.current.systemVersion
    }
    
    
    // 获取iPhone、ipad、TV、的具体型号
    var modelName: String {
        var systemInfo = utsname()
        uname(&systemInfo)
        let machineMirror = Mirror(reflecting: systemInfo.machine)
        let identifier = machineMirror.children.reduce("") { identifier, element in
            guard let value = element.value as? Int8, value != 0 else { return identifier }
            return identifier + String(UnicodeScalar(UInt8(value)))
        }
        
        switch identifier {
        case "iPod5,1":                                 return "iPod Touch 5"
        case "iPod7,1":                                 return "iPod Touch 6"
        case "iPhone3,1", "iPhone3,2", "iPhone3,3":     return "iPhone 4"
        case "iPhone4,1":                               return "iPhone 4s"
        case "iPhone5,1", "iPhone5,2":                  return "iPhone 5"
        case "iPhone5,3", "iPhone5,4":                  return "iPhone 5c"
        case "iPhone6,1", "iPhone6,2":                  return "iPhone 5s"
        case "iPhone7,2":                               return "iPhone 6"
        case "iPhone7,1":                               return "iPhone 6 Plus"
        case "iPhone8,1":                               return "iPhone 6s"
        case "iPhone8,2":                               return "iPhone 6s Plus"
        case "iPhone8,4":                               return "iPhone SE"
        case "iPhone9,1":                               return "iPhone 7"
        case "iPhone9,2":                               return "iPhone 7 Plus"
        case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4":return "iPad 2"
        case "iPad3,1", "iPad3,2", "iPad3,3":           return "iPad 3"
        case "iPad3,4", "iPad3,5", "iPad3,6":           return "iPad 4"
        case "iPad4,1", "iPad4,2", "iPad4,3":           return "iPad Air"
        case "iPad5,3", "iPad5,4":                      return "iPad Air 2"
        case "iPad2,5", "iPad2,6", "iPad2,7":           return "iPad Mini"
        case "iPad4,4", "iPad4,5", "iPad4,6":           return "iPad Mini 2"
        case "iPad4,7", "iPad4,8", "iPad4,9":           return "iPad Mini 3"
        case "iPad5,1", "iPad5,2":                      return "iPad Mini 4"
        case "iPad6,7", "iPad6,8":                      return "iPad Pro"
        case "AppleTV5,3":                              return "Apple TV"
        case "i386", "x86_64":                          return "Simulator"
        default:                                        return identifier
        }
    }
}

UIBarButtonItem:

自定义返回一个UIBarButtonItem

import UIKit

extension UIBarButtonItem {
    
    public class func itemWithTarget(target: AnyObject ,
                               action: Selector ,
                                image: String? ,
                                title: String? ,
                          selectImage: String?) -> UIBarButtonItem {
        
        let buttonItem :UIBarButtonItem = UIBarButtonItem()
        
        // 添加自定义的View
        buttonItem.customView = buttonWithTarget(target: target, action: action, image: image, title: title, selectImage: selectImage)
        
        return buttonItem
        
        
        
    }
    
    public class func buttonWithTarget(target: AnyObject ,
                                       action: Selector ,
                                        image: String? ,
                                        title: String? ,
                                  selectImage: String?) -> UIButton {
        
        let button :UIButton = UIButton()

        // 默认图片
        if let imageStr = image  {
            
            if let image = UIImage(named:imageStr) {
                
                button.setImage(image, for: UIControlState.normal)
            }
            
        }
        

        
        // highlighted图片
        if let selectImageStr = selectImage {
            if let selectImage = UIImage(named:selectImageStr) {
                
                button.setImage(selectImage, for: UIControlState.highlighted)
            }
        }
        
        
        // 设置按钮中图片的尺寸
        button.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
        
        button.addTarget(target, action: action, for: .touchUpInside)
        
        button.titleLabel?.font = UIFont.systemFont(ofSize: 10)
        
        // 设置为的内边距
        button.titleEdgeInsets = UIEdgeInsetsMake(button.bounds.height * 0.5, 0, 0, 0)

        return button   
    }   
}

相关文章

  • 关于 Swift Error 的分类

    关于 Swift Error 的分类

  • iOS机型判断-Swift

    最近项目转换Swift语言,好多用的分类都要重写,最近写了个判断iPhone机型的UIDevice分类Swift一...

  • UIButton倒计时

    oc 用法 NSObject分类 swift 用法

  • swift 分类

    分类就是为一个已有的类、结构体、枚举类型或者协议类型添加新功能 扩展语法 使用关键字extension来声明 1....

  • swift 分类

    UIView: 添加View的x,y,width,height,centerX,centerY,maxY,maxX...

  • UIImageView 圆角

    OC 版本:创建UIImageView 分类: 使用: Swift版本: 调用:

  • Swift 5.0 新特性

    声明 此篇文章大部分类容翻译自 Hacking with Swift 的 What’s new in Swift ...

  • 如何在swift中实现oc分类

    在oc中为了增强已有类的功能,我们经常使用分类,但是在swift中没有分类这种写法了,相对应的是swift中只有扩...

  • Swift代码库之分页UI部分基础代码

    Swift代码库之分页UI部分基础代码 实现分类 新建浏览全部swift,VisitAllVC 尝试完成table...

  • Swift5.1 - 指针Pointer

    指针分类 使用swift提供指针类型: UnsafePointer UnsafeMutablePointer Un...

网友评论

    本文标题:swift 分类

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