iOS - 动画Animation零基础完全教程之一

原创 2015年07月10日 13:10:48

当改变一个view的大小时,如果希望慢慢的变大,或者慢慢的变小;

当我们显示一个view时,如果希望慢慢的淡入,而不是一下子就显示出来;

当我们隐藏一个view时,如果希望慢慢的淡出,而不是一下子就隐藏消失掉;

当我们改变一个view的位置时,如果希望慢慢的移动,而不是一下子就移到最终位置;

。。。

当我们遇到以上场景时,我们可以用iOS提供的animation技术来解决。

iOS中的 UIKit 和 Core Amimation 这两个框架提供了 animation 的解决方案。UIKit 是一种轻量级的animation,可以完成预置的几种动画效果,如果想要更多更炫的动画效果,就得借助于 Core Animation 了。下面分别讲解:

(一)UIKit

在 UIKit 中,动画是由 UIView 提供的,UIView 提供了最常用的一组动画效果,原理是通过在一个时间段内改变 UIView 对象的属性(也即实例变量,比如frame,bounds,backgroundColor等)来实现的。目前支持动画效果的属性有下面几个:

Table 4-1  Animatable UIView properties

Property

Changes you can make

frame

Modify this property to change the view’s size and position relative to its superview’s coordinate system. (If the transform property does not contain the identity transform, modify the bounds or center properties instead.)

bounds

Modify this property to change the view’s size.

center

Modify this property to change the view’s position relative to its superview’s coordinate system.

transform

Modify this property to scale, rotate, or translate the view relative to its center point. Transformations using this property are always performed in 2D space. (To perform 3D transformations, you must animate the view’s layer object using Core Animation.)

alpha

Modify this property to gradually change the transparency of the view.

backgroundColor

Modify this property to change the view’s background color.

contentStretch

Modify this property to change the way the view’s contents are stretched to fill the available space.


那具体怎么做呢?按照一般的思路,应该是UIView暴露出一个回调函数,然后在动画过程中,我们在回调函数每次被回调时,给某个属性设置新的值,以达到动画效果。但实际上在看了苹果给出的接口后,比我们想象的要简单许多,苹果给出的接口(iOS 4.0及以后)是下面的形式:(这些接口都是以 UIView 的类方法 的形式给出的)

先看个例子吧:

[UIView animateWithDuration:1.0 animations:^{
        firstView.alpha = 0.0;
        secondView.alpha = 1.0;
}];

上面这段代码实现的动画效果是:在1秒钟内,firstView淡出,secondView淡入。这个接口的神奇之处就在于苹果并没有让我们动态计算 alpha 的值,而是直接给出最终的值,中间的动态计算完全由框架自行完成。其实对于其他的属性在实现动画效果时也是类似,直接在block里给出最终的值,中间的动态计算都不用我们管。

animateWithDuration:animations:completion: 通常用来:

1)通知我们动画已经完成;

2)组合一个连续的动画:在completion block里再次调用上面的某个动画接口。

看例子:

- (IBAction)showHideView:(id)sender
{
    // Fade out the view right away
    [UIView animateWithDuration:1.0
        delay: 0.0
        options: UIViewAnimationOptionCurveEaseIn
        animations:^{
             thirdView.alpha = 0.0;
        }
        completion:^(BOOL finished){
            // Wait one second and then fade in the view
            [UIView animateWithDuration:1.0
                 delay: 1.0
                 options:UIViewAnimationOptionCurveEaseOut
                 animations:^{
                    thirdView.alpha = 1.0;
                 }
                 completion:nil];
        }];
}

如果要改变动画的默认设置,可以用第三个接口 animateWithDuration:delay:options:animations:completion:

它允许改变:

1)delay:动画在多长时间以后再开始。

2)timing curve:变换曲线的类型,就是动画变换的类型,比如淡入、淡出、线性变换等。

3)repeat:动画重复的次数。

4)reverse:动画结束时是否复原。

5)touch events:动画过程中是否接收touch events。

6)interrupt:当前动画是否可以中断其他已经在进行中的动画,或者一直等到其他动画完毕后再perform。


注:iOS 4.0以前,用的是下面这些接口:beginAnimations:context: 和 commitAnimations 。

看个例子:

[UIView beginAnimations:@"ToggleViews" context:nil];
    [UIView setAnimationDuration:1.0];
 
    // Make the animatable changes.
    firstView.alpha = 0.0;
    secondView.alpha = 1.0;
 
    // Commit the changes and perform the animation.
    [UIView commitAnimations];

要点是:把要更改属性值的代码写在 beginAnimations:context: 和 commitAnimations 中间。

好了,第一讲先到此为止,待续 。。。

参考资料:

https://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/AnimatingViews/AnimatingViews.html#//apple_ref/doc/uid/TP40009503-CH6-SW1

iOS Core Animation详解(四)AutoLayout中的动画

原创blog,转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS SDK详解专栏 http://blog.csdn.net/column/details/huan...
  • Hello_Hwc
  • Hello_Hwc
  • 2015年08月06日 20:40
  • 3163

iOS中 Animation 动画大全 韩俊强的博客

1.iOS中我们能看到的控件都是UIView的子类,比如UIButton UILabel UITextField UIImageView等等 2.UIView能够在屏幕的显示是因为在创建它的时候内部...
  • qq_31810357
  • qq_31810357
  • 2015年10月21日 18:37
  • 6095

iOS-Core-Animation之十二----性能调优

>*代码应该运行的尽量快,而不是更快* - 理查德 在第一和第二部分,我们了解了Core Animation提供的关于绘制和动画的一些特性。Core Animation功能和性能都非常强大,但如...
  • huangznian
  • huangznian
  • 2015年01月20日 16:08
  • 1793

Unity教程之手把手教你实现动画Animation

在游戏设计中,经常会需要实现动画等动态效果,例如当主角在移动时,需要有一个走路的动画,那怎么实现播放动画呢?...
  • caoshuangxiaodouya
  • caoshuangxiaodouya
  • 2015年06月09日 19:14
  • 3253

我的iOS自学之路-从零基础到企业实战开发

本篇详细说一下我学习iOS技术的每一个过程以及分享一下我学iOS的方法 1. 为什么要学习iOS?2014年11月左右进入某家公司,使用Java语言进行移动App接口开发工作,工作中认识了以为iOS开...
  • vbirdbest
  • vbirdbest
  • 2016年11月03日 16:14
  • 4232

让你的tableView动起来 —— iOS8 SpringAnimation应用

你是否对一成不变的手机界面感到疲倦,整天拖拉控件面对死板的界面失去兴趣。让你的界面动起来或许是不错的选择。Spring Animation 是一种特殊的动画曲线,自从 iOS 7 开始被广泛应用在系统...
  • qq_24901135
  • qq_24901135
  • 2015年07月08日 14:01
  • 1820

iOS开发动画(Animation)总结

UIView的,翻转、旋转,偏移,翻页,缩放,取反的动画效果 翻转的动画     //开始动画 [UIView beginAnimations:@"doflip" co...
  • mad2man
  • mad2man
  • 2013年12月25日 14:32
  • 50242

[ios开发技巧之]动画Animation中断后的恢复

问题来源: 前面在使用跑马灯的时候(参考:http://blog.csdn.net/ipromiseu/article/details/7412111),一旦程序进入到后台后,再次打开程序,发现动画...
  • ipromiseu
  • ipromiseu
  • 2012年04月08日 01:58
  • 3363

iOS 核心动画 书籍

iOS Core Animation: Advanced Techniques http://www.cocoachina.com/ios/20150104/10814.html ...
  • jeffasd
  • jeffasd
  • 2016年03月07日 13:43
  • 942

完全零基础开始学习iOS开发(1)

看OC的教程已经有几天时间了,昨天到现在也看了两集的Stanford University的iOS7的开发课程了。跟着老师的思路发现跟上有点难,所以也会边看边百度(google被封,无法上)各种自己觉...
  • FollowTheLight
  • FollowTheLight
  • 2014年12月12日 15:14
  • 298
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS - 动画Animation零基础完全教程之一
举报原因:
原因补充:

(最多只允许输入30个字)