iOS

使用 CocoaPods 进行团队协作

让程序流畅稳健的运行是开发者们的理想,这个理想时而遥远,时而近在咫尺。而往往那个触手可及的时刻,却正是梦碎的边缘。 在团队协作中,修改别人的代码是一件像扫雷游戏一样的事情,你永远不知道你做的到底是 “优化” 还是 “触雷”。 使用 Cocoapods 将不同的功能进行切割,独立成模块再整合进 App,成为了一个行之有效的方法,本文就来一起研究一下如何使用 CocoaPods 来进行组件模块化。 创建自己的 Pod 以 RichTextView 为例,完成类库的功能后的第一件事就是创建 RichTextView 的 podspec 描述文件 进入项目的根目录 pod spec

  • Kevin Zhow
    Kevin Zhow
3 min read
iOS

15 分钟带你入门 Fuse

Fuse 这个技术令人兴奋,不仅可以用来做交互原型,还可以导出成 iOS 和 Android 的原生 App 供生产使用,重点的重点在于输出的成品品质不错,所以私以为值得学习一下 (官方也表示以后会支持导出 Mac,Linux,Windows App)。 我们来通过一张图了解一下 Fuse 做了什么。 所以 Fuse 是一种和 Qt 类似的技术,通过一个中间层封装系统的 API 来实现 “一次编写,到处调试” 的伟大理想。 但是没有了 Qt

  • Kevin Zhow
    Kevin Zhow
8 min read
iOS

通过 Kingfisher Extension 自定义图片处理

惯例先上源码:GitHub源码 对Kingfisher进行了简单的封装, 好处: 1. 在用`pod`管理依赖的情况下,不需要到处`import Kingfisher`。 2. 代码较为集中,方便管理。若以后需要替换`Kingfisher`也很方便。 还可以很集中地添加默认值,在我自己的项目中,全部图片都是默认 let defaultOptions: KingfisherOptionsInfo = [ .Options([.BackgroundDecode, .LowPriority]), .Transition(ImageTransition.Fade(0.55)) ] 如果需要对Kingfisher下载下来的图片需要作特殊处理,例如作圆角处理,

  • Limon
    Limon
1 min read
iOS

MDHTMLLabel —— 轻量级 HTML 文本的解决方案

对于复杂的文本格式,后端同学给你的往往会是 HTML,而 iOS 除了 WebView 和一个巨卡无比的 TextView 渲染方案,并没有别的选择。 上一期 使用 TextKit 定制全功能的 TextView,我们使用了 TextKit 以及正则匹配的方法实现了对特定格式的文本解析。 MDHTMLLabel 则是基于 CoreText 用正则对 HTML 进行了解析,实现了一个轻量级的方案,项目代码使用 Objective-C 编写,支持 Swift 项目调用。 MDHTMLLabel

  • Kevin Zhow
    Kevin Zhow
1 min read
iOS

iOS App 的内存释放问题

循环引用 这个是非常常见的一个问题,你可以从这里获取我们的演示 Demo 例如我们创建了一个 BadGuy() 功能只有一个,可以存一个闭包。 class BadGuy: NSObject { var holdAction: (() -> Void)? } 然后我们从外层 ViewController 通过 Push 的方法进入 DetailViewController,DetailViewController 里创建了 10000 个 UIView 来占用些内存,badGuy 通过闭包修改了下 DetailViewController 的 hello

  • Kevin Zhow
    Kevin Zhow
2 min read
iOS

监听动画过程中 CALayer 的属性改变

有时候可能需要追踪某个物体在动画过程中的属性改变,使得另外一个物体进行同步的属性改变,这时候就要用 CALayer 的 presentationLayer() 来获取 var whiteView: UIView! let displayLink = CADisplayLink(target: self, selector: "displayLinkCallback") displayLink.addToRunLoop(NSRunLoop.currentRunLoop(), forMode: NSRunLoopCommonModes) UIView.animateWithDuration(0.25, animations: { self.whiteView.frame.

  • Kevin Zhow
    Kevin Zhow
1 min read
iOS

优化侧滑返回与 ScrollView 的兼容性

倘若在 ViewController 中添加了一个 TableView,那么很可能在侧滑返回的时候,反而先触发了 TableView 的上下滚动,这一点是非常恼人的。 通过 requireGestureRecognizerToFail() 这个方法,就可以很好的处理这个问题。 if let gestures = navigationController?.view.gestureRecognizers { for recognizer in gestures { if recognizer.isKindOfClass(UIScreenEdgePanGestureRecognizer) { scrollView.panGestureRecognizer.requireGestureRecognizerToFail(recognizer as! UIScreenEdgePanGestureRecognizer)

  • Kevin Zhow
    Kevin Zhow
1 min read
NSNotification

键盘通知处理之禅

自从 iOS 8 引入了第三方键盘扩展后(或更早),键盘通知就不太正常了。例如,若用户使用中文拼音键盘,弹出时UIKeyboardWillShowNotification可能发送不只一次(有可能两次,甚至三次)。 作者:@nixzhu ================================= 近日在 iOS 9 beta4 上,我更观察到 UIKeyboardWillShowNotification 可能会少发,导致之前根据其发送次数做的算法不能正常工作,结果就是在使用中文拼音键盘时,本该处于键盘上方的输入框会被键盘挡住大部分。 为了解决这个问题,同时也对键盘通知相关的代码做整理并重构(毕竟这些代码分散在 ViewController 里也不好维护,更难以重用),我想写一个单独的库是最好的选择。至于库的名字,“键盘侠”

  • nixzhu
7 min read