iphone--通过UIView实现动画效果
2011-09-01 15:41
411 查看
下面是几条设置语句:
1)setAnimationDuration :这里设置了整个动画过程持续的时间,单位是秒
2)setAnimationCurve :这是设置了整个动画的速度。默认的是匀速动画。这里我们将它设置为EaseInOut ,意思是在开始和结束的时候动画速度较慢,在中间过程动画速度较快,这样的动画显得更加的平滑。
3)setAnimationTransition :这里是设置动画的样式,iPhone 提供了4种不同的样式,分别是:UIViewAnimationTransitionFlipFromLeft, UIViewAnimationTransitionFlipFromRight, UIViewAnimationTransitionCurlUp, UIViewAnimationTransitionCurlDown (读者可以自己一一尝试)。注意到还使用了cache 。一般情况下我们都将此参数设为YES ,用来加速动画的渲染。
[welcomeController viewWillAppear:YES];
[foodlistController viewWillDisappear:YES];
... ...
[foodlistController viewDidDisappear:YES];
[welcomeController viewDidAppear:YES];
怎么理解这些语句的作用呢?我们回想一下之前提过的delegate 。Apple 将很多实现的细节隐藏起来,程序员不需要干涉其中的部分;但是Apple 又同时为程序员提供了足够的接口以满足我们特定的需要。这里的这四个函数就可以看作是这个功效:我们不需要去干涉具体的view转换的工作,我们只需要去控制4点:1)在这个view即将消失之前,我们需要做什么(viewWillDisappear );2)在这个view即将出现之前,需要做什么(viewWillAppear );3)在这个view已经消失之后,需要做什么(viewDidDisappear );4)在这个view已经出现之后,需要做什么(viewDidAppear )。这四个函数给了我们程序员足够的能力完成我们特定的需要。
举个例子,如果当前的view 正在进行某个动画,当它即将消失的时候,我们希望能停止这个动画(因为已经对用户不可见了)。只需要在viewWillDisappear 中实现这个功能就可以了。
以下来自---http://www.cnblogs.com/ulihj/archive/2011/01/26/1945336.html
UIKit通过封装Core Animation实现了一些常用的动画效果,用起来非常方便。使用的方法是通过UIView来声明一个动画块,在这个块中做的任何属性变化,都会呈现动画效果。
具体的语法上有两种写法,这里讲的是老式的写法,IOS4.0后的新写法请参考文档,基本的思路是一样的。具体可以看这个:
http://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/AnimatingViews/AnimatingViews.html
先说明几个基本的概念,方便理解后面的函数。
属性变化: 可以实现动画效果的属性包括位置(frame, bound), 对齐关系,透明度,背景色,内容拉伸,和transform(这个就多了,下面讲)
timing curve: 时间曲线,以时间作为横轴,其他值(这里就是指需要变化的属性)作为纵轴。在整个动画持续时间内的函数曲线。
ease in/ease out: 慢进/慢出,结合上面的时间曲线的概念,就是在动画开始/或是结束的时候,属性变化会减慢,看下面这个图:是ease in ease out 也是默认的动画效果(不是很好,网上随便找的)
liner: 线性变化,这个不讲了,时间变化曲线一共就这两种。默认是EaseInEaseOut,无疑EaseInEaseOut的效果会更加平滑,但是负荷也大些,不过一般问题不大。
fade in /fade out: 淡入, 淡出,是一种动画效果,就是逐渐消失,逐渐出现这种东西。
讲具体的函数前,先举个例子先,
代码
[UIView beginAnimations:@"ToggleViews" context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationCurve:UIViewAnimationEaseInOut];
// Make
the animatable changes.
firstView.alpha = 0.0;
secondView.alpha = 1.0;
// Commit
the changes and perform the animation.
[UIView
commitAnimations];
这段代码就可以实现一个漂亮的淡入淡出的切换了,你所要做的,就是用begin/commit函数圈起一块区域,然后把你想做的变化写进去,无论有多少个,他们都会不被立刻执行,知道commit函数提交。简单的说明下函数:
beginAnimation:context: 两个参数都是给delegate用的,一般nil也没问题,animationID是标示当前动画的名称,在一个代理对应多端动画时用于区别,context是void*,回调函数里常用,用于传递额外的数据,保存上下文,避免使用全局变量。
setAnimationCurve: 这个上面说过了,默认就是UIViewAnimationCurveEaseInOut,不写也可以。
setAnimationDuration: 动画的长度,秒作为单位
再补充个常用的函数,setAnimationRepeatCount: 可以重复动画,有些场景下挺好用的。
如果需要在动画之前或是动画之后做一些操作的话,可以定义代理(就是两个回调函数)。看下面这个例子,在一个动画后面接了另外一个动画,熟悉代理的使用话,就没啥可讲的了。
代码
// This
method begins the first animation.
- (IBAction)showHideView:(id)sender
{
[UIView beginAnimations:@"ShowHideView" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDuration:1.0];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(showHideDidStop:finished:context:)];
// Make
the animatable changes.
thirdView.alpha = 0.0;
// Commit
the changes and perform the animation.
[UIView commitAnimations];
}
// Called
at the end of the preceding animation.
- (void)showHideDidStop:(NSString *)animationID
finished:(NSNumber *)finished
context:(void *)context
{
[UIView beginAnimations:@"ShowHideView2" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
[UIView setAnimationDuration:1.0];
[UIView setAnimationDelay:1.0];
thirdView.alpha = 1.0;
[UIView commitAnimations];
}
接下去要讲view transition的动画效果,就是常见的那种翻页的效果,老版本的写法是这样的:
代码
//代码摘自iphone基础开发
[UIView
setAnimationTransition:
UIViewAnimationTransitionFlipFromRight
forView:self.view cache:YES];
[blueViewController viewWillAppear:YES];
[yellowViewController viewWillDisappear:YES];
[blueViewController.view removeFromSuperview];
[self.view insertSubview:yellowViewController.view atIndex:0];
[yellowViewController viewDidDisappear:YES];
[blueViewController viewDidAppear:YES];
在IOS4.0 之前,要实现view之间切换的动画效果你必须使用父view,然后切换子view,只有子view的效果才能出现动画,所以你看setAnimationTranistion里forView里写的父view。
4.0之后,可以这么写:
代码
[UIView
transitionFromView:(self.view)
toView:(self._view2)
duration:1.0
options:UIViewAnimationOptionTransitionCurlUp
completion:^(BOOL
finished) {
}
];
1)setAnimationDuration :这里设置了整个动画过程持续的时间,单位是秒
2)setAnimationCurve :这是设置了整个动画的速度。默认的是匀速动画。这里我们将它设置为EaseInOut ,意思是在开始和结束的时候动画速度较慢,在中间过程动画速度较快,这样的动画显得更加的平滑。
3)setAnimationTransition :这里是设置动画的样式,iPhone 提供了4种不同的样式,分别是:UIViewAnimationTransitionFlipFromLeft, UIViewAnimationTransitionFlipFromRight, UIViewAnimationTransitionCurlUp, UIViewAnimationTransitionCurlDown (读者可以自己一一尝试)。注意到还使用了cache 。一般情况下我们都将此参数设为YES ,用来加速动画的渲染。
[welcomeController viewWillAppear:YES];
[foodlistController viewWillDisappear:YES];
... ...
[foodlistController viewDidDisappear:YES];
[welcomeController viewDidAppear:YES];
怎么理解这些语句的作用呢?我们回想一下之前提过的delegate 。Apple 将很多实现的细节隐藏起来,程序员不需要干涉其中的部分;但是Apple 又同时为程序员提供了足够的接口以满足我们特定的需要。这里的这四个函数就可以看作是这个功效:我们不需要去干涉具体的view转换的工作,我们只需要去控制4点:1)在这个view即将消失之前,我们需要做什么(viewWillDisappear );2)在这个view即将出现之前,需要做什么(viewWillAppear );3)在这个view已经消失之后,需要做什么(viewDidDisappear );4)在这个view已经出现之后,需要做什么(viewDidAppear )。这四个函数给了我们程序员足够的能力完成我们特定的需要。
举个例子,如果当前的view 正在进行某个动画,当它即将消失的时候,我们希望能停止这个动画(因为已经对用户不可见了)。只需要在viewWillDisappear 中实现这个功能就可以了。
以下来自---http://www.cnblogs.com/ulihj/archive/2011/01/26/1945336.html
UIKit通过封装Core Animation实现了一些常用的动画效果,用起来非常方便。使用的方法是通过UIView来声明一个动画块,在这个块中做的任何属性变化,都会呈现动画效果。
具体的语法上有两种写法,这里讲的是老式的写法,IOS4.0后的新写法请参考文档,基本的思路是一样的。具体可以看这个:
http://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/AnimatingViews/AnimatingViews.html
先说明几个基本的概念,方便理解后面的函数。
属性变化: 可以实现动画效果的属性包括位置(frame, bound), 对齐关系,透明度,背景色,内容拉伸,和transform(这个就多了,下面讲)
timing curve: 时间曲线,以时间作为横轴,其他值(这里就是指需要变化的属性)作为纵轴。在整个动画持续时间内的函数曲线。
ease in/ease out: 慢进/慢出,结合上面的时间曲线的概念,就是在动画开始/或是结束的时候,属性变化会减慢,看下面这个图:是ease in ease out 也是默认的动画效果(不是很好,网上随便找的)
liner: 线性变化,这个不讲了,时间变化曲线一共就这两种。默认是EaseInEaseOut,无疑EaseInEaseOut的效果会更加平滑,但是负荷也大些,不过一般问题不大。
fade in /fade out: 淡入, 淡出,是一种动画效果,就是逐渐消失,逐渐出现这种东西。
讲具体的函数前,先举个例子先,
代码
[UIView beginAnimations:@"ToggleViews" context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationCurve:UIViewAnimationEaseInOut];
// Make
the animatable changes.
firstView.alpha = 0.0;
secondView.alpha = 1.0;
// Commit
the changes and perform the animation.
[UIView
commitAnimations];
这段代码就可以实现一个漂亮的淡入淡出的切换了,你所要做的,就是用begin/commit函数圈起一块区域,然后把你想做的变化写进去,无论有多少个,他们都会不被立刻执行,知道commit函数提交。简单的说明下函数:
beginAnimation:context: 两个参数都是给delegate用的,一般nil也没问题,animationID是标示当前动画的名称,在一个代理对应多端动画时用于区别,context是void*,回调函数里常用,用于传递额外的数据,保存上下文,避免使用全局变量。
setAnimationCurve: 这个上面说过了,默认就是UIViewAnimationCurveEaseInOut,不写也可以。
setAnimationDuration: 动画的长度,秒作为单位
再补充个常用的函数,setAnimationRepeatCount: 可以重复动画,有些场景下挺好用的。
如果需要在动画之前或是动画之后做一些操作的话,可以定义代理(就是两个回调函数)。看下面这个例子,在一个动画后面接了另外一个动画,熟悉代理的使用话,就没啥可讲的了。
代码
// This
method begins the first animation.
- (IBAction)showHideView:(id)sender
{
[UIView beginAnimations:@"ShowHideView" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDuration:1.0];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(showHideDidStop:finished:context:)];
// Make
the animatable changes.
thirdView.alpha = 0.0;
// Commit
the changes and perform the animation.
[UIView commitAnimations];
}
// Called
at the end of the preceding animation.
- (void)showHideDidStop:(NSString *)animationID
finished:(NSNumber *)finished
context:(void *)context
{
[UIView beginAnimations:@"ShowHideView2" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
[UIView setAnimationDuration:1.0];
[UIView setAnimationDelay:1.0];
thirdView.alpha = 1.0;
[UIView commitAnimations];
}
接下去要讲view transition的动画效果,就是常见的那种翻页的效果,老版本的写法是这样的:
代码
//代码摘自iphone基础开发
[UIView
setAnimationTransition:
UIViewAnimationTransitionFlipFromRight
forView:self.view cache:YES];
[blueViewController viewWillAppear:YES];
[yellowViewController viewWillDisappear:YES];
[blueViewController.view removeFromSuperview];
[self.view insertSubview:yellowViewController.view atIndex:0];
[yellowViewController viewDidDisappear:YES];
[blueViewController viewDidAppear:YES];
在IOS4.0 之前,要实现view之间切换的动画效果你必须使用父view,然后切换子view,只有子view的效果才能出现动画,所以你看setAnimationTranistion里forView里写的父view。
4.0之后,可以这么写:
代码
[UIView
transitionFromView:(self.view)
toView:(self._view2)
duration:1.0
options:UIViewAnimationOptionTransitionCurlUp
completion:^(BOOL
finished) {
}
];
相关文章推荐
- iPhone开发学习笔记通过UIView实现动画效果
- IPhone开发学习笔记:通过UIView实现动画效果
- iPhone的动画效果类型及实现方法
- UIView实现动画效果
- ios学习--详解IPhone动画效果类型及实现方法
- 通过js实现简单的动画效果
- IOS开发-UIView之动画效果的实现方法(合集)
- 通过style实现从屏幕底下弹出dialog动画效果
- iphone的动画效果类型及实现方法
- [转载]Iphone 各种动画效果的实现方法
- 使用NSTimer与iphone的简单动画,实现飘雪效果
- Android应用通过AnimationDrawable实现View的动画效果
- iPhone的动画效果类型及实现方法
- iPhone跳转的动画效果类型及实现方法 CATransition
- 实现 iPhone 相机快门动画效果的代码例子
- UIView实现动画效果
- iphone的动画效果类型及实现方法(收集)
- 安卓开发20:动画之Animation 详细使用-主要通过java代码实现动画效果
- 实现多个UIView之间切换的动画效果
- iOS开发-UIView之动画效果的实现方法(合集)