春天来了,到了动物交配强制 ATS(App Transport Security)的季节,广袤的 iOS 大草原上到处都弥漫着一种叫 HTTPS 的荷尔蒙气息。 白岩松赵忠祥 苹果在 WWDC 2016 上宣布:2016 年底将要求所有 APP 适配苹果的 App Transport Security,简单地说就是除了特殊情况(浏览器、第三方服务、媒体)外,APP 跟服务端的通信必须使用 ...
阅读全文 »

JSONNeverDie 是一个 Swift 写的 JSON 编码、解码库,利用反射实现 JSON 到 Model 的自动映射,无需任何 parse 代码,强大而简单。Github 地址:https://github.com/johnlui/JSONNeverDie JSONNeverDie 可以采用“子项目”或者“源代码”两种方式引入,本人更推荐前者,更好更新。以及,非常重要的一点,也是我做 ...
阅读全文 »

用过 StoryBoard 的同学一定非常享受往页面上拖控件,再拖几个约束就搞定一个 UI 元素的过程,但是在某些情况下,我们还是不得不使用代码来进行控件初始化和 frame 设置,这时候如果你懒得写那 N 行的初始化代码,你一定会想“要是能在 StoryBoard 中初始化控件,再用代码调用就好了”,这事完全可行的,详细使用方法如下: 1. 拖动一个控件到目标 ViewController 的文 ...
阅读全文 »

1997 2015 年过去了,我很怀念它。 2015 年 12 月初,苹果面向未来的新编程语言 Swift 开源了!作为一种新的同时适应面向对象和面向过程两种编程范式的静态编译型语言,Swift 在语言设计、工具链完善度、基础库实现、官方推动力和开发者数量上都占有巨大的首发优势,Swift 的开源可以说是轰动全球软件开发界的大事。 Swift 的优势暂且不吹了,下面说点实在的:参与 Swift ...
阅读全文 »

使用了 Auto Layout 之后,由于布局引擎已经从根本上不同,所以我们就需要改变“直接修改 frame”这种操控动画的方式了。其实 Auto Layout 做动画的原理说起来也很简单:先修改某一个或者几个约束的值,再使用动画语句应用这些值: // 修改从 StoryBoard 绑定到类的约束的值self.verticalSpaceConstraintOfButtonToLabel.const ...
阅读全文 »

使用过 Auto Layout 的人肯定都遇到过获取不到真实 frame 的情况,而大部分人经过简单搜索都能得到一个满意的解决方案:在想获取真实 frame 之前调用一下 self.view.layoutIfNeeded(),这是一个能用但是并不好的方法:进行了额外的毫不需要的 frame 计算。 我们从 View Controller 的生命周期来分析这个问题: viewDidLoadviewW ...
阅读全文 »

刚开始使用 Auto Layout 的时候,我应该都经历过神奇的“bug”:手动设置 frame 值不管用,通过修改 frame 进行的动画出现了“反向运动”的奇特效果,而且动画时间也大幅缩短,非常奇怪。 这涉及到了 Auto Layout 本身的特性,我们先来看一段苹果的文档。 External Changes(外部变化)下面是一些会引发 Auto Layout 重新排布的常见外部变化情况: O ...
阅读全文 »

代码示例:https://github.com/johnlui/Swift-On-iOS/tree/master/BuildAnInfiniteCarousel/BuildAnInfiniteCarousel 环境要求:Xcode 7.0+ / Swift 2.0+ 本篇文章中,我将跟大家一起动手构造一个非常常见的无限循环的图片轮播功能。 目标我们的目标是打造一个支付宝这样的无限循环图片轮播: ...
阅读全文 »

今天继续分享“可视化编程 Tips”系列文章。今天分享的是图文混排 UIButton 的可视化编辑。 大家一定都遇到过图文混排按钮的需求,就像下面这样: 图中“模考”、“联系”两个按钮都是图片和文字组成一个 button,图片在左。传统的做法是,自定义一个类,继承自 UIButton,然后再在 layoutSubviews() 中改变图片和文字的位置。而利用可视化编辑,我们可以不用代码来实现。 ...
阅读全文 »

今天继续分享“可视化编程 Tips”系列文章。今天的主题是消灭重复又无聊的代码。 省去设置代理为自己的代码我们经常会遇到这样的需求:一个普通的页面,顶部是一些固定的信息,不可滚动。下面是一个 Table View,可以滚动。在这个时候,没法使用 UITableViewController,我们就需要手动添加一个 UITableView,类似下图的样子: 然后我们需要让当前的 View Contr ...
阅读全文 »