zoukankan      html  css  js  c++  java
  • iOS之Transition动画

    iOS之Transition动画

          第一眼看Quartz2D的动画会觉得神奇兼奇怪,为什么苹果会规定Transition动画要按照下面的样例写:

      

      苹果官方文档写到:把view属性变化的代码放置于beginAnimation和commitAnimation之间,即可自动实现动画效果。

         那苹果的框架是如何捕获或感知到这中间的代码块的?先看看CoreAnimation中的动画框架解释。

          当设置一个layer的值的时候,Layer-Tree(L-Tree)立即改变,而展示的Presentation Tree是由插值渐变。所以CoreAnimaton对代码块的捕获实际上是用Layer-Treey记录下了变化的东西,然后在动画线线程中把P-Tree渐变到L-Tree。

          再看CATransition,这个东西没有对Layer的属性做任何的改变,只是让一个Layer执行1个动画。而这个动画会取2个值,1个是转换前的值,另1个是转换后的值。为了保证能够截取到正确的2个值,要求当值变化后,立即进行截取(CommitAnimation)。所以苹果建议动画块放在commitAnimation之前。实际上,放在commitAnimation之后也是可以的,因为当commitAnimation时,动画线程中的动画还没有执行,会延迟1段时间。但是如果动画线程快于主线程的执行,则获得不到正确的transition效果。

          所以动画的实质意义是,从动画执行开始,属性变化时间变为UIAnimation指定时间(默认UIView为立即变化,CALayer为渐变),动画即是改变了Layer属性的变化时间~这就是核心,CoreAnimation以及Quartz2D的所以其它效果都是在这一基础上而搭建起来的。

  • 相关阅读:
    HDU ACM 1020 Encoding
    HDU ACM 1019 Least Common Multiple
    HDU ACM 1009 FatMouse' Trade
    HDU ACM 1032 The 3n + 1 problem
    HD ACM 1061 Rightmost Digit
    UVa 401 Palindromes
    UVa 489 Hangman Judge
    HDU ACM 1071 The area
    5/25
    受涼6/8
  • 原文地址:https://www.cnblogs.com/tekkaman/p/2755688.html
Copyright © 2011-2022 走看看