IOS动画是一个程序中必不可缺的,它能极大的提高用户体验度,我觉得动画能让程序有很炫的效果.

先说UIVIew 动画:

UIView动画分两种: 属性动画和过渡动画

一, 属性动画;

就是UIview和它的子类的某些属性发生改变的时候完成的动画.

能完成动画的属性 大概有以下几种

1 frame //基于父视图的位置和大小

2 bounds// 改变视图的框架和边界

3 center//视图位于父视图的中心点

4 transform //旋转

5 aplha //透明度

6 backgroundColor //背景色

7 contentStretch //拉伸变换


动画的实现是按照动画块来运行的

[UIView beginAnimations:@"动画" context:@"1"];
    [UIView setAnimationDuration:2.0];
    self.imageView.backgroundColor = [UIColor whiteColor];
    
    [UIView commitAnimations];



这就是一个动画块,是由UIView调用

beginAnimations:@"动画" context:@"1"


第一个参数是动画的标识,第二个参数附加的应用程序信息用来传递给动画代理消息

结束时 调用

commitAnimations

(只有在这两个方法之内的动画才会被正确调用)


调用动画还有另外一种模式

 block块(这个是推荐使用的模式)

[UIView animateWithDuration:1.5f animations:^{
        self.imageView.backgroundColor = [UIColor whiteColor];
    } completion:^(BOOL finished) {
        self.imageView.backgroundColor = [UIColor blackColor];
    }];

^{

self.imageView.backgroundColor = [UIColor whiteColor];

}

这个就是block块了 刚接触block ,觉得它就是java中的内部类(内部方法??)

它和java中的内部类一样 可以读取它所在函数内的变量值 

在查阅了一些资料后我发现block的用途远远不止动画 (以下摘自JasonLee的专栏点击打开链接 这个是他关于block的详细解析)



(Block除了能够定义参数列表、返回类型外,还能够获取被定义时的词法范围内的状态(比如局部变量),并且在一定条件下(比如使用__block变量)能够修改这些状态。此外,这些可修改的状态在相同词法范围内的多个block之间是共享的,即便出了该词法范围(比如栈展开,出了作用域),仍可以继续共享或者修改这些状态。

通常来说,block都是一些简短代码片段的封装,适用作工作单元,通常用来做并发任务、遍历、以及回调。

比如我们可以在遍历NSArray时做一些事情:



[cpp]  view plain copy



1. - (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx, BOOL *stop))block;
  1.   


其中将stop设为YES,就跳出循环,不继续遍历了。

而在很多框架中,block越来越经常被用作回调函数,取代传统的回调方式。

  • 用block作为回调函数,可以使得程序员在写代码更顺畅,不用中途跑到另一个地方写一个回调函数,有时还要考虑这个回调函数放在哪里比较合适。采用block,可以在调用函数时直接写后续处理代码,将其作为参数传递过去,供其任务执行结束时回调。
  • 另一个好处,就是采用block作为回调,可以直接访问局部变量。比如我要在一批用户中修改一个用户的name,修改完成后通过回调更新对应用户的单元格UI。这时候我需要知道对应用户单元格的index,如果采用传统回调方式,要嘛需要将index带过去,回调时再回传过来;要嘛通过外部作用域记录当前操作单元格的index(这限制了一次只能修改一个用户的name);要嘛遍历找到对应用户。而使用block,则可以直接访问单元格的index。) 

 二  过渡动画

这个动画类型 ,主要用于UIView 或UIview子类 他们之间的转换 如一个UIView 切换到另外一个UIView

实现方法也是以上介绍过的两种 不同的是实现动画的方法都是封装好的枚举值 例如

[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.imageView cache:YES];

这个就是实现一个从imageView上替换一个

imageView的动画

这个枚举值的实现如下

typedef enum {
   UIViewAnimationTransitionNone,
   UIViewAnimationTransitionFlipFromLeft,
   UIViewAnimationTransitionFlipFromRight,
   UIViewAnimationTransitionCurlUp,
   UIViewAnimationTransitionCurlDown,
} UIViewAnimationTransition;


简单说下动画的效果

UIViewAnimationTransitionNone,// 不实现任何动画


UIViewAnimationTransitionFlipFromLeft,//从右向里翻转更换画面


UIViewAnimationTransitionFlipFromRight,//从左向里翻转


UIViewAnimationTransitionCurlUp,//向上翻页


UIViewAnimationTransitionCurlDown,//向下加页