iOS

A collection of 11 posts

iOS

自定义 UITextView 关键字高亮与点击检测

一种很简单的方法,妙手偶得,可比较容易地处理 Mention、Hashtag 等 作者:@nixzhu 我们大概都知道,设置好 UITextView 的 dataDetectorTypes 后,就可自动检测并高亮网络链接、电话号码、地址等功能。而且在 iPhone 6s (Plus) 上,还可以 3D Touch 网络链接,直接就有 pop/peek 的功能。 若我们要增加对 mention 或 hashtag 的检测,例如 *@nixzhu* hello 里的 @nixzhu 或 what a great

  • nixzhu
iOS

使用 CocoaPods 进行团队协作

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

iOS

通过 Kingfisher Extension 自定义图片处理

惯例先上源码:GitHub源码 对Kingfisher进行了简单的封装, 好处: 1. 在用`pod`管理依赖的情况下,不需要到处`import Kingfisher`。 2. 代码较为集中,方便管理。若以后需要替换`Kingfisher`也很方便。 还可以很集中地添加默认值,在我自己的项目中,全部图片都是默认 let defaultOptions: KingfisherOptionsInfo = [ .Options([.BackgroundDecode, .LowPriority]), .Transition(ImageTransition.Fade(0.55)) ] 如果需要对Kingfisher下载下来的图片需要作特殊处理,例如作圆角处理,但又不想保存两份,怎么办? 在这个Extension中,我简单写了个圆角处理的方法,如果有兴趣,可以看看源码。 原理:直接调用KingfisherManager中的downloadImageWithURL,得到图片,对图片进行处理后再调用KingfisherManager中的storeImage来保存图片。 cell.

  • Limon
    Limon
iOS

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

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

iOS

MonkeyKing —— 不使用官方 SDK 集成微博,微信分享

第三方 SDK 还是少集成的好,不仅体积不小,而且你也不知道他在你的 App 里做了什么。对于这些 SDK 只能请出 MongkeyKing 齐天大圣来收服了。 安装 source 'https://github.com/CocoaPods/Specs.git' platform :ios, '8.0' use_frameworks! pod 'MonkeyKing', '~> 0.5' 基本使用 修改 plist Info.plist, 添加 URL Type: 如果是 iOS 9, 那么你还需要在

  • nixzhu
iOS

iOS App 的内存释放问题

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

iOS

三步使用 JSON Server 模拟 API

有了设计图之后,后端的 API 往往也才刚刚开始做,在这个时候,能有一个原型工具模拟一份 API 会让一切过的开心很多。 安装 第一步当然是安装啦 Homebrew Homebrew 是 Mac 上的第三方库管理工具,我们使用 Homebrew 来安装 Node.js ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" Node.js brew install node json-server npm install -g json-server

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.origin.y += 49.0 }, completion: {_ in displayLink.removeFromRunLoop(NSRunLoop.currentRunLoop(), forMode:

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) println("Require UIScreenEdgePanGestureRecognizer to failed") break } } }

NSNotification

键盘通知处理之禅

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

  • nixzhu