动画是 iOS 中非常重要的一部分,它给用户展现出应用灵气的一面。

在动画块中修改 Frame

在原来使用 frame 布局时,在 UIView 的 animate block 中对 view 的布局进行修改,动画即可生效。

1
2
3
[UIView animte ... {
view.frame = ...
}]
;

AutoLayout 没有 Frame 时如何做动画

在 AutoLayout 中,view 的布局等属性都是由约束 constraint 决定,Apple 也不建议在使用 AutoLayout 直接修改 view 的 frame。

在介绍之前,先看一下 UIView 的 layoutIfNeeded 方法:

阅读全文 »

先抛出结论:

setNeedsUpdateConstraints 保证之后肯定会调用 updateConstraintsIfNeeded .

SetNeedsLayout 保证之后肯定会调用 layoutIfNeeded .

AutoLayout 的本质

AutoLayout 是指,用一套规则(约束)来定义视图之间的位置。

AutoLayout 能够让每个 view 有唯一的 frame。

其实,这样子解释,还是让人很难理解,所以接下来会简单介绍下 AutoLayout ,在对其有所了解和深入后,再解释下面这几个问题:

  • 保证之后调用 的之后是在什么时候?
  • 这些方法的调用时序大概是怎么样的?
  • 为什么要先 set 一下,而不是直接 updateConstraint 和 layout
    阅读全文 »

GCD 的一点疑惑与自解

GCD 其实已经了解了很久了,在实际工程中也会经常用,但是其实很多实践都是浅尝辄止。

最近又在回头看这块儿的内容,有一些知识点,原来不甚明白的,现在有了新的认识,刚好也记录下。

GCD 是一套方案,GCD 本身管理了一组线程池,GCD 负责线程池中的线程创建销毁、并且这种能力是动态化的,即可以充分利用当前 CPU 的多核特性。
添加到 GCD 队列中的任务,会由 GCD 来决定运行在哪一个线程上。也就是说,GCD Queue 是一个抽象概念, task 是添加到 Queue 中不假,但是实际仍然是运行在线程上的。

阅读全文 »