Swift 小结

Selector

Selector("xxx") 习惯用来调用私有api,不做编译检查
#selector(self.action(id:,id:)

Extension

extension Object {
    
    //用结构体创建关联key ,可以有效避免 命名空间的污染
    private struct AssociatedKeys {
        static var firstKey = "firstKey"
    }
    
    var firstProperty: Bool? {
        set {
            objc_setAssociatedObject(self, &AssociatedKeys.firstKey, NSNumber.init(value: newValue!), objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
        }
        get {
            return (objc_getAssociatedObject(self, &AssociatedKeys.firstKey) as? NSNumber)?.boolValue
        }
    }
}
extension String {
    
    func pinYin() -> String {
        let mutableString = NSMutableString.init(string: self)
        //转换成拉丁字符
        CFStringTransform(mutableString, nil, kCFStringTransformToLatin, false)
        //去除音标
        CFStringTransform(mutableString, nil, kCFStringTransformStripDiacritics, false)
        let string = String(mutableString)
        //去除空格
        return string.replacingOccurrences(of: " ", with: "")
    }
}

CoreText

CTFrame
CTLine
CTRun: 是每一个相同属性字符串 ,但是不会隔行。

 // 获得要绘制区域的高度
let framesetter = CTFramesetterCreateWithAttributedString(mutableStr)
let restrictSize = CGSize.init(width: SCREEN_WIDTH, height: CGFloat.greatestFiniteMagnitude)
let coreTextSize = CTFramesetterSuggestFrameSizeWithConstraints(framesetter, CFRangeMake(0, 0) , nil, restrictSize, nil)    

Core Graphics

绘制图片
绘制文本
混合图层绘制
渐变绘制
上下文变换

linkView.png

Runloop

    
    func addObserver() {
        let runloop = CFRunLoopGetCurrent()
        let runMode = CFRunLoopMode.defaultMode
        
        let observer = CFRunLoopObserverCreateWithHandler(kCFAllocatorDefault, CFRunLoopActivity.beforeWaiting.rawValue, true, 0) { (observer, _) in
            if (true) {//达到一定的条件就移除此监听
                CFRunLoopRemoveObserver(runloop, observer, runMode)
            }
            self.perform(#selector(self.timeAction), on: Thread.main, with: nil, waitUntilDone: false, modes: [RunLoopMode.defaultRunLoopMode.rawValue])
        }
        CFRunLoopAddObserver(runloop, observer, runMode)
    }
    
    @objc func timeAction() {}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Core Graphics Framework是一套基于C的API框架,使用了Quartz作为绘图引擎。它提供了低...
    ShanJiJi阅读 5,534评论 0 20
  • 书写的很好,翻译的也棒!感谢译者,感谢感谢! iOS-Core-Animation-Advanced-Techni...
    钱嘘嘘阅读 6,802评论 0 6
  • 1、 刚工作那会儿,我在一家公司里做我师傅的小跟班,每天穿梭在办公室也偶尔穿梭在车间里。当时,我的舍友是个学日语的...
    我爱西兰花阅读 3,064评论 1 2
  • “姑娘,姑娘,老儿我找到你们要找的公子啦!”三个月前,活土地跑进心理咨询管说道。莫言非亟亟从房间里走出来问道:“在...
    沧海行人阅读 3,558评论 0 4