• Swift 与 Objective-C 混编及如何调用 Cocoapods

    目录 Swift 与 Objectve-C 混编 Swift 如何使用 Objective-C 的 cocoapods Swift 与 Objectve-C 混编 Swift 文件里使用 Objective-C 类 无论是在 Swift 工程中新建 Objectve-C 的类,还是在 Objective-C 中新建 Swift 的类,Xcode 都会提示 Would you like to configure an Objective-C bridging header? ,选择是,就会新建一个Bridging 的文件,文件的名称一般是 ProjectName-Bridging-Header.h,比如项目名称是 Cat,那么名称就会是Cat-Bridging-Header.h,然后在这个文件里引用 Swift 需要用到的 Objective-C 的头文件,比如 #import "GHCatView.h" 那么就在 Swift 的类里使用...


  • CALayer (一)

    ###目录 简介 contents 参考资料 简介 CALayer(图层) 可以看作是UIView的内部实现,每一个 UIView 都有一个 名称为layer 的属性,我们看到的view的具体内容都是这个layer展示的,UIView 对 CALayer 做了一些封装,并在此基础之上提供了和用户交互的一系列方法。和 UIVIew 一样,CALayer 也有相同的层级关系,每一个CALyer 对象都可以增加 sublayer。通过 CALayer 我们可以实现一些 UIView 无法实现的效果,比如阴影,圆角,边框等,而且还可以实现很多 UIView 无法实现的非常炫酷的动画。 contents CALayer 有一个 id 类型的contents的属性,这个 contents 负责显示具体的内容,比如一张图片等,这里要注意假如要为 contents 设置一张图片的话,不能用UIImage,用UIImage的话,显示出来的图层上面什么都没有。要用 CGImageRef 类型的值,但 CGImageRef 不是Cocoa 对象,而是一个Core Foundation类型,所以要通过 toll-free bridging 来转换一下,比如 layer.contents = (__bridge id)image.CGImage; 除了给 contents 赋值...


  • CIKernel 的学习

    在使用 Core Image 的时候,Apple 提供的效果有时候无法满足我们的需求,我们希望能实现自己的滤镜,这个时候我们可以用 CIKernel。CIKernel 是 iOS8 的时候出现的,它是一种类似于 OpenGL 着色器的处理程序。苹果提供了一系列的函数和数据类型供我们使用它。具体参见Core Image Kernel Language。 子类 CIKernel 有两个子类:CIColorKernel和CIWarpKernel。 初始化 我们通过一个 NSString 来初始化一个 CIKernel; NSString *kernelString = @"kernel vec4 moveUpTwoPixels (sampler image) {\n" @" vec2 dc = destCoord();\n" @" vec2 offset = vec2(0.0, 2.0);\n" @" return sample (image, samplerTransform (image, dc +...


  • Touch ID 的使用

    目录 序 思路 具体实现 参考资料 序 iOS8,苹果开放了 Touch ID 的 SDK,苹果自身的 Connect、 Health 应用都使用了 Touch ID 来进行解锁登录,一些第三方应用比如 1Password 也使用了Touch ID 的登录方式,那么对于我们自己的应用,如何来使用 Touch ID 这个优秀的工具呢?下面是个人的一些想法和实践。 思路 既然使用 Touch ID 来自动登录,那么一定要把用户的的账号密码信息存储起来,然后在通过 Touch ID 验证通过的时候来获取到存储的用户密码,进行登录。因为密码的安全性很重要,所以可以把密码存储到 Keychain 里,如果觉得单独的存储字符串还是不够安全,可以在存储之前做一层 AES 的加密。流程分两部分,一部分为配置Touch ID,一部分为使用 Touch ID。流程如下 配置 Touch ID 用户正常登录 登陆成功之后,通过 Keychain 把用户名和密码存储起来 在设置里面面增加一项,启用 Touch ID,当用户选择启用 Touch...


  • Objective-C 中的方法混写(Method Swizzling)

    目录 什么是方法混写(Method Swizzling) 如何使用方法混写 注意事项 参考资料 什么是方法混写(Method Swizzling) Objective-C 中对象调用方法,或者叫“消息传递”,是通过一种动态绑定机制实现的,即对象收到消息后,究竟调用哪个方法,完全于运行期决定,而且方法名和其对应的实现也是可以在运行期改变的,这样,我们不需要源代码,也不用通过继承子类的来覆写方法,就能改变这个类中的方法。这种在运行期改变类的方法实现的手段被称之为方法混写(Method Swizzling). 如何使用方法混写 举一个UIAlertView的例子,UIAlertView 有一个 show 的方法,我们想改变这个 show 的方法,可以按如下实现: UIAlertView+GHSwizzling.m #import "UIAlertView+GHSwizzling.h" #import <objc/runtime.h> @implementation UIAlertView (GHSwizzling) + (void)load { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ SEL show = @selector(show); SEL replaceSHow = @selector(_gh_show); Method existingMethod = class_getInstanceMethod(self, show); Method newMethod =...