CEMKit-Swift 0.1.3

CEMKit-Swift 0.1.3

测试已测试
Lang语言 SwiftSwift
许可证 MIT
发布最后发布2015年1月
SPM支持 SPM

Cem Olcay 维护。



  • 作者
  • Cem Olcay

CEMKit

用于快速原型设计和快速开发的 UIKit 工具集

目录

文档

UIView 扩展

初始化

视图的快速初始化方法
    convenience init (x: CGFloat,
        y: CGFloat,
        w: CGFloat,
        h: CGFloat)

框架

快速访问和操作 UIView 的 frame 的 CGRect 值
    var x: CGFloat {
        get {
            return self.frame.origin.x
        } set (value) {
            self.frame = CGRect (x: value, y: self.y, width: self.w, height: self.h)
        }
    }
    var y: CGFloat {
        get {
            return self.frame.origin.y
        } set (value) {
            self.frame = CGRect (x: self.x, y: value, width: self.w, height: self.h)
        }
    }
    var w: CGFloat {
        get {
            return self.frame.size.width
        } set (value) {
            self.frame = CGRect (x: self.x, y: self.y, width: value, height: self.h)
        }
    }
    var h: CGFloat {
        get {
            return self.frame.size.height
        } set (value) {
            self.frame = CGRect (x: self.x, y: self.y, width: self.w, height: value)
        }
    }
    var position: CGPoint {
        get {
            return self.frame.origin
        } set (value) {
            self.frame = CGRect (origin: value, size: self.frame.size)
        }
    }
    var size: CGSize {
        get {
            return self.frame.size
        } set (value) {
            self.frame = CGRect (origin: self.frame.origin, size: size)
        }
    }
也适用于自动布局
    var left: CGFloat {
        get {
            return self.x
        } set (value) {
            self.x = value
        }
    }
    var right: CGFloat {
        get {
            return self.x + self.w
        } set (value) {
            self.x = value - self.w
        }
    }
    var top: CGFloat {
        get {
            return self.y
        } set (value) {
            self.y = value
        }
    }
    var bottom: CGFloat {
        get {
            return self.y + self.h
        } set (value) {
            self.y = value - self.h
        }
    }
使用偏移量获取框架值
    func leftWithOffset (offset: CGFloat) -> CGFloat
    func rightWithOffset (offset: CGFloat) -> CGFloat
    func topWithOffset (offset: CGFloat) -> CGFloat
    func botttomWithOffset (offset: CGFloat) -> CGFloat

轻松设置锚点位置
    enum AnchorPosition: CGPoint {
        case TopLeft        = "{0, 0}"
        case TopCenter      = "{0.5, 0}"
        case TopRight       = "{1, 0}"

        case MidLeft        = "{0, 0.5}"
        case MidCenter      = "{0.5, 0.5}"
        case MidRight       = "{1, 0.5}"

        case BottomLeft     = "{0, 1}"
        case BottomCenter   = "{0.5, 1}"
        case BottomRight    = "{1, 1}"
    }
    func setAnchorPosition (anchorPosition: AnchorPosition)
阴影、边框、圆角、描边、圆

添加阴影

    func addShadow (offset: CGSize,
        radius: CGFloat,
        color: UIColor,
        opacity: Float)

添加边框

    func addBorder (width: CGFloat,
        color: UIColor)

设置边框的圆角半径

    func setCornerRadius (radius: CGFloat)

向边框添加描边

    func drawStroke (width: CGFloat,
        color: UIColor)

绘制圆

    func drawCircle (fillColor: UIColor,
        strokeColor: UIColor,
        strokeWidth: CGFloat)

绘制圆弧

    func drawArc (from: CGFloat,
        to: CGFloat,
        clockwise: Bool,
        width: CGFloat,
        fillColor: UIColor,
        strokeColor: UIColor,
        lineCap: String)

变换

操作视图的旋转和缩放

旋转

    func setRotationX (x: CGFloat)
    func setRotationY (y: CGFloat)
    func setRotationZ (z: CGFloat)

   func setRotation (x: CGFloat,
        y: CGFloat,
        z: CGFloat)

缩放

    func setScale (x: CGFloat,
        y: CGFloat)

动画

使用常量值动画化视图

常量

    let UIViewAnimationDuration: NSTimeInterval = 1
    let UIViewAnimationSpringDamping: CGFloat = 0.5
    let UIViewAnimationSpringVelocity: CGFloat = 0.5

动画方法

    func animate (animations: (()->Void)!,
        completion: ((Bool)->Void)? = nil) 

    func spring (animations: (()->Void)!,
        completion: ((Bool)->Void)? = nil)

手势

添加单行手势

点击

    func addTapGesture (tapNumber: NSInteger,
        target: AnyObject, action: Selector)

滑动

    func addSwipeGesture (
        direction: UISwipeGestureRecognizerDirection,  
        numberOfTouches: Int,  
        target: AnyObject,  
        action: Selector)  

拖动

    func addPanGesture (target: AnyObject,
        action: Selector)

UIViewController 扩展

快速访问顶部和底部布局

顶部

    var top: CGFloat {
        get {
            if let nav = self.navigationController {
                if nav.navigationBarHidden {
                    return view.top
                } else {
                    return nav.navigationBar.bottom
                }
            } else {
                return view.top
            }
        }
    }

底部

    var bottom: CGFloat {
        get {
            if let tab = tabBarController {
                if tab.tabBar.hidden {
                    return view.bottom
                } else {
                    return tab.tabBar.top
                }
            } else {
                return view.bottom
            }
        }
    }

计算排除导航栏和标签栏的应用区域

    var applicationFrame: CGRect {
        get {
            return CGRect (x: view.x, y: top, width: view.w, height: bottom - top)
        }
    }

快速访问导航栏属性

     var navigationBar: UINavigationBar? {
        get {
            return navigationController?.navigationBar
        }
    }

获取设备导航栏高度

    var navigationBarHeight: CGFloat {
        get {
            if let nav = self.navigationController {
                return nav.navigationBar.h
            }

            return 0
        }
    }

获取或设置导航栏颜色

    var navigationBarColor: UIColor? {
        get {
            return navigationController?.navigationBar.tintColor
        } set (value) {
            navigationController?.navigationBar.barTintColor = value
        }
    }

UILabel 扩展

NSAttributedString

AttributedStrings 属性用于访问、添加或更新标签的富文本
    private var UILabelAttributedStringArray: UInt8 = 0
    var attributedStrings: [NSAttributedString]? {
        get {
            return objc_getAssociatedObject(self, &UILabelAttributedStringArray) as? [NSAttributedString]
        } set (value) {
            objc_setAssociatedObject(self, &UILabelAttributedStringArray, value, UInt(OBJC_ASSOCIATION_RETAIN_NONATOMIC))
        }
    }

添加

    func addAttributedString (text: String,
        color: UIColor,
        font: UIFont)
    func addAttributedString (attributedString: NSAttributedString)

更新

    func updateAttributedStringAtIndex (index: Int,
        attributedString: NSAttributedString)
    func updateAttributedStringAtIndex (index: Int,
        newText: String)

Frame

通过内容自动设置其高度
    func getEstimatedHeight () -> CGFloat
     func fitHeight ()  

字符串扩展

根据字符串索引访问字符的子脚本
    subscript (i: Int) -> String {
        return String(Array(self)[i])
    }

UIFont 扩展

FontType 和 FontName 枚举以轻松创建 UIFont 枚举
    enum FontType: String
    enum FontName: String
    class func Font (name: FontName, type: FontType, size: CGFloat) -> UIFont

甚至可以针对特定字体进行自定义

    class func HelveticaNeue (type: FontType, size: CGFloat) -> UIFont

打印单行上的字体族

    class func PrintFontFamily (font: FontName)

UIColor 扩展

在 0 到 255 的范围内轻松创建随机颜色或 RBGA 颜色
    class func randomColor () -> UIColor
    class func RGBColor (r: CGFloat,
        g: CGFloat,
        b: CGFloat) -> UIColor
    class func RGBAColor (r: CGFloat,
        g: CGFloat,
        b: CGFloat,
        a: CGFloat) -> UIColor

UIImage 扩展

依据纵横比调整图片大小

计算固定高度的可能宽度

    func aspectWidthForHeight (height: CGFloat) -> CGFloat

计算固定宽度可能的高度

    func aspectHeightForWidth (width: CGFloat) -> CGFloat

依据宽度调整图片大小(自动计算高度并保持纵横比)

    func aspectResizeWithWidth (width: CGFloat) -> UIImage

依据高度调整图片大小(自动计算宽度并保持纵横比)

    func aspectResizeWithHeight (height: CGFloat) -> UIImage

CGPoint

CGPoint 定制的操作符
    func + (left: CGPoint, right: CGPoint) -> CGPoint
    func - (left: CGPoint, right: CGPoint) -> CGPoint
StringLiteralConvertable 实现
    public init(stringLiteral value: StringLiteralType)
    public init(extendedGraphemeClusterLiteral value: StringLiteralType)
    public init(unicodeScalarLiteral value: StringLiteralType) {
            self = CGPointFromString(value)

CGSize

CGSize 定制的操作符
    func + (left: CGSize, right: CGSize) -> CGSize
    func - (left: CGSize, right: CGSize) -> CGSize

CGFloat

访问设备相关测量

屏幕宽度

    var ScreenWidth: CGFloat {
        get {
            return UIScreen.mainScreen().bounds.size.width
        }
    }

屏幕高度

    var ScreenHeight: CGFloat {
        get {
            return UIScreen.mainScreen().bounds.size.height
        }
    }

状态栏高度

    var StatusBarHeight: CGFloat {
        get {
            return UIApplication.sharedApplication().statusBarFrame.height
        }
    }
将度转换为弧度
    func degreesToRadians (angle: CGFloat) -> CGFloat
将值归一化到 [0, 1] 或反之亦然

将 [min, max] 转换为 [0, 1]

    func normalizeValue (value: CGFloat,
        min: CGFloat,
        max: CGFloat) -> CGFloat

将 [0, 1] 转换为 [min, max]

    func convertNormalizedValue (value: CGFloat,
        min: CGFloat,
        max: CGFloat) -> CGFloat

UIAlertViewController

基于行的单行,基于阻塞的 iOS 8 警报
    func alert (title: String,
        message: String,
        cancelAction: ((UIAlertAction!)->Void)? = nil,
        okAction: ((UIAlertAction!)->Void)? = nil) -> UIAlertController

UIBarButtonItem

带有图像的单行创建栏按钮项
    func barButtonItem (imageName: String,
        action: (AnyObject)->()) -> UIBarButtonItem

带有文本和颜色的创建栏按钮项

    func barButtonItem (title: String,
        color: UIColor,
        action: (AnyObject)->()) -> UIBarButtonItem

BlockButton

带有 actionBlock: 的常规 UIButton
    var actionBlock: ((sender: BlockButton) -> ())? {
        didSet {
            self.addTarget(self, action: "action:", forControlEvents: UIControlEvents.TouchUpInside)
        }
    }

    func action (sender: BlockButton) {
        actionBlock! (sender: sender)
    }

BlockWebView

不带 UIWebViewDelegate 的基于阻塞操作的常规 UIWebView
    var didStartLoad: ((NSURLRequest) -> ())?
    var didFinishLoad: ((NSURLRequest) -> ())?
    var didFailLoad: ((NSURLRequest, NSError) -> ())?    
    var shouldStartLoadingRequest: ((NSURLRequest) -> (Bool))?