在 swift 里扩展 UIColor 使用十六进制颜色值
Dec 05, 2019
4.2. The RGB hexadecimal notations: #RRGGBB 十六进制颜色表示方式是 #RRGGBB(6位),带 alpha 的表示方式是 #RRGGBBAA(8位) 取值范围是 00 - FF。 十六进制颜色缩写的表示方式是 #RGB(3位),带 alpha 的表示方式是 #RGBA(4位) 取值范围是 0 - F,缩略的规则和前三位相同。 …
了解 Image 的 capInsets 和 resizingMode
Dec 04, 2019
拉伸 UIImage 的时候使用的方法是 resizableImage,它的声明如下: func resizableImage( withCapInsets capInsets: UIEdgeInsets, resizingMode: UIImage.ResizingMode ) -> UIImage capInsets 指定要保护的区域,就是图像的四个角落,如果大小是 0 就表示不需要保护 resizingMode 非保护区域里的图像应该怎么显示,两个选择:拉伸或者平铺内容 …
视网膜屏幕下像素对齐计算方法
Dec 03, 2019
使用 CoreGraphics 裁剪图片的时候如果计算后的尺寸没有像素对齐,绘制的图像就会有 1px 的透明边框。 像素对齐的算法: 例如需要计算 0.5pt 的高度在当前屏幕下需要多少 px(像素)进行显示: …
在 iOS 里 100% 还原 Sketch 实现的阴影效果
Nov 19, 2019
还原不了设计师视觉稿的开发者不是一个合格的页面仔。 Sketch 是 APP 设计的神器,大部分设计师都选择它作为 APP 界面的设计工具。 在 Sketch 里设置一个阴影,效果图和参数如下: …
给 Xcode 添加最新的 iOS DeviceSupport
Nov 18, 2019
默认情况下 Xcode 只能调试其内置对应的 iOS 版本,如果发布了新的 iOS 版本而没有更新到与之对应的新版本 Xcode,就不能进行调试了。 要解决这个问题, 需要在 Xcode 的 DeviceSupport 目录内添加对应的版本目录。 …
swift 里正确的实现一个 NSTextStorage 子类
Nov 11, 2019
即使你按照官方的文档来操作依然有可能会掉进坑里,因为 swift 的实现和 objc 稍有不同。 NSTextStorage 是基于 NSMutableAttributedString 的一个虚基类。 这意味着当你写一个 NSTextStorage 的子类时,必须正确实现以下 4 个接口 …
iOS 13 下访问受限制的 _ivar
Jun 09, 2019
在 iOS 13 之前,一般是使用 KVC 来实现访问私有的实例变量,比如要访问 UITextField 的 _placeholderLabel 一般会这么做: extension UITextField { var placeholderLabel: UILabel? { get { return value(forKey: "_placeholderLabel") as? UILabel } } } 一直到 iOS 12,这个方法运行的很好,但是升级到了 iOS 13,运行的时候就崩溃了: …
模仿微信适配 iPad 的布局方式
May 08, 2019
微信在 iPad 上竖屏时显示的样式和手机版一样,横屏的显示为分隔视图。 UIKit 里可以实现这样的效果的组件是UISplitViewController。 接下来就是要自定义一个 UISplitViewController 来逐步实现像微信一样的效果。 …
在 iOS 中使用 icofont 字体
Apr 30, 2019
获取 icofont 可以在 icofont.com 下载到 icofont.ttf,里面包含了很多图标。 把下载回来的 icofont.ttf 拖到项目里,或者新建一个 fonts.bundle 用来放字体资源。 在 APP 启动的时候注册字体,注册之后就能在 APP 里全局使用了,使用方法和使用系统字体一样。 …
在 ObjC 项目里使用 Swift 静态库
Mar 29, 2019
Xcode 9 开始 Swift 支持编译生成静态类型的 framework 如果给之前的 ObjC 项目直接添加 Swift 写的 framework,在编译的时候会报错,错误信息是无法找到 Swift 的方法。 解决方法很简单,在 ObjC 项目里添加一个空的 swift 源文件就行了。 …