引用: http://www.cnblogs.com/v2m_/archive/2011/10/28/2227979.html
这篇文章对ios的简单动画做了很好的总结,如果想要实现更漂亮的动画效果,恐怕只能用OpenGlES 2D等重型库了。
一.基本方式:使用UIView类的UIViewAnimation扩展
函数说明
+ (void)beginAnimations:(NSString *)animationID context:(void *)context; // 开始准备动画
+ (void)commitAnimations; // 运行动画
// 没有get方法,下面的set在快外调用无效
+ (void)setAnimationDelegate:(id)delegate; // 委托default = nil
+ (void)setAnimationWillStartSelector:(SEL)selector; // default = NULL. -animationWillStart:(NSString *)animationID context:(void *)context
+ (void)setAnimationDidStopSelector:(SEL)selector; // default = NULL. -animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
+ (void)setAnimationDuration:(NSTimeInterval)duration; // default = 0.2动画时间
+ (void)setAnimationDelay:(NSTimeInterval)delay; // default = 0.0延迟多少时间开始执行动画
+ (void)setAnimationStartDate:(NSDate *)startDate; // default = now ([NSDate date])动画开始日期?不知道啥用.- -
+ (void)setAnimationCurve:(UIViewAnimationCurve)curve; // default = UIViewAnimationCurveEaseInOut动画方式
+ (void)setAnimationRepeatCount:(float)repeatCount; // default = 0.0. May be fractional重复次数
+ (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses; // default = NO. YES的话,动画(非最后一次)结束后动态复原到最开始状态
+ (void)setAnimationBeginsFromCurrentState:(BOOL)fromCurrentState; // default = NO. YES,停止之前的动画,从现在这里开始新动画the current view position is always used for new animations -- allowing animations to "pile up" on each other. Otherwise, the last end state is used for the animation (the default).
+ (void)setAnimationTransition:(UIViewAnimationTransition)transition forView:(UIView *)view cache:(BOOL)cache; // 添加动画到view上,cache是YES的时候比较高效,但是动画过程中不能更新界面上的内容,NO时每一帧都重新画,可以实时更新
+ (void)setAnimationsEnabled:(BOOL)enabled; // 是否忽略一些动画设置
+ (BOOL)areAnimationsEnabled;
一个动画的代码
[UIView beginAnimations:nil context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
[UIView setAnimationDuration:2.7];
[UIView setAnimationTransition:transition forView:self.view cache:YES];
// operation>>>
[self.view exchangeSubviewAtIndex:0 withSubviewAtIndex:1];
// end<<<<<<
[UIView commitAnimations];
其中transition取值范围
typedef enum {
UIViewAnimationTransitionNone,
UIViewAnimationTransitionFlipFromLeft,
UIViewAnimationTransitionFlipFromRight,
UIViewAnimationTransitionCurlUp,
UIViewAnimationTransitionCurlDown,
} UIViewAnimationTransition;
特点:基础,使用方便,但是效果有限
二.block方式:使用UIView类的UIViewAnimationWithBlocks扩展
函数说明
+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_0);//间隔,延迟,动画参数(好像没用?),界面更改块,结束块
+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_0); // delay = 0.0, options = 0
+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_0); // delay = 0.0, options = 0, completion = NULL
+ (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_0);
+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_0); // toView added to fromView.superview, fromView removed from its superview界面替换,这里的options参数有效
举例:
[UIView animateWithDuration:0.7 delay:0 options:0 animations:^(){
self.view.alpha = 0.2;
[self.view exchangeSubviewAtIndex:1 withSubviewAtIndex:0];
self.view.alpha = 1;
} completion:^(BOOL finished)
{
}];
当areAnimationsEnabled为NO时,上面不能动画显示
[UIView transitionFromView:lImage toView:mImage duration:0.7 options:options completion:^(BOOL finished)
{
if (finished) {
[self.view addSubview:lImage];
[self.view sendSubviewToBack:lImage];
[self.view sendSubviewToBack:mImage];
}
}];
options取值范围
enum {
UIViewAnimationOptionLayoutSubviews = 1 << 0,
UIViewAnimationOptionAllowUserInteraction = 1 << 1, // turn on user interaction while animating
UIViewAnimationOptionBeginFromCurrentState = 1 << 2, // start all views from current value, not initial value
UIViewAnimationOptionRepeat = 1 << 3, // repeat animation indefinitely
UIViewAnimationOptionAutoreverse = 1 << 4, // if repeat, run animation back and forth
UIViewAnimationOptionOverrideInheritedDuration = 1 << 5, // ignore nested duration
UIViewAnimationOptionOverrideInheritedCurve = 1 << 6, // ignore nested curve
UIViewAnimationOptionAllowAnimatedContent = 1 << 7, // animate contents (applies to transitions only)
UIViewAnimationOptionShowHideTransitionViews = 1 << 8, // flip to/from hidden state instead of adding/removing
UIViewAnimationOptionCurveEaseInOut = 0 << 16, // default
UIViewAnimationOptionCurveEaseIn = 1 << 16,
UIViewAnimationOptionCurveEaseOut = 2 << 16,
UIViewAnimationOptionCurveLinear = 3 << 16,
UIViewAnimationOptionTransitionNone = 0 << 20, // default
UIViewAnimationOptionTransitionFlipFromLeft = 1 << 20,
UIViewAnimationOptionTransitionFlipFromRight = 2 << 20,
UIViewAnimationOptionTransitionCurlUp = 3 << 20,
UIViewAnimationOptionTransitionCurlDown = 4 << 20,
UIViewAnimationOptionTransitionCrossDissolve = 5 << 20,//ios5
UIViewAnimationOptionTransitionFlipFromTop = 6 << 20,//ios5
UIViewAnimationOptionTransitionFlipFromBottom = 7 << 20,//ios5
};
typedef NSUInteger UIViewAnimationOptions;
特点:快捷方便,效果更多.可以如上示例1那样实现界面个元素属性渐进变化的动态展示
三.core方式:使用CATransition类
使用要引入QuartzCore.framework
官方有个示例:ViewTransitions
基本上就是
CATransition *transition = [CATransition animation];
transition.duration = 0.7;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionMoveIn;//{kCATransitionMoveIn, kCATransitionPush, kCATransitionReveal, kCATransitionFade};
//更多私有{@"cube",@"suckEffect",@"oglFlip",@"rippleEffect",@"pageCurl",@"pageUnCurl",@"cameraIrisHollowOpen",@"cameraIrisHollowClose"};
transition.subtype = kCATransitionFromLeft;//{kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromBottom};
transition.delegate = self;
[self.view.layer addAnimation:transition forKey:nil];
// 要做的
[self.view exchangeSubviewAtIndex:1 withSubviewAtIndex:0];
其中需要注意的是:界面调整(动画前后展示的两个界面)需要在动画时间内完成,否则没有效果,对下次也有影响,我测的不是太完整,大家自己写个performSelector: withObject: afterDelay:试验下看看就知道.
特点:动画效果较多(但是私有),可以实现UIViewController之间的动画
作者注:这些私有效果现在能通过apple的审核,所以放心用吧。
总结图片:
相关推荐
iOS界面动画大全,各种常用动画,使用动画源码实现
iOS核心动画高级技巧iOS核心动画高级技巧iOS核心动画高级技巧iOS核心动画高级技巧iOS核心动画高级技巧
SmoothSwitchLibrary仿IOS切换界面动画效果,代码简单易学,共学习使用
IOS过渡动画
基于ios开发的小游戏,包含了actionsheet、imagepicker、声音、动画等的使用 在xcode4.5.2下编译通过
iOS核心动画CABasicAnimation很简单的实现了图片的循环左右摆动。
该文档为IOS界面的psd格式,是IOS界面的UI设计,比较简约。
IOS 基本动画(旋转、移动、闪烁、缩放等)
ios上的扇形弹出菜单,有动画效果,具体细节参考demo。
iOS广告动画开场,支持gif动画场景的播放,开发人员可以任意换取gif动画
iOS 常用动画Demo小总结
讲ios的核心动画原理 讲ios的核心动画原理
iOS基本动画效果汇总,供大家一起共同分享学习。
iOS核心动画,iOS核心动画,iOS核心动画,iOS核心动画,iOS核心动画,iOS核心动画
CRYoYoBallAnimation实现iOS小球动画库
IOS引导界面 欢迎界面 实现了 UISccrollView 以及 图片碎裂的动画效果
iOS 根据声波分贝峰值,使用贝塞尔曲线绘制动画,并可录音,使用avfundation系统框架。
ios 实现封面的展示动画效果 具体实现看代码
ios核心动画高级技巧
iOS-UIDynamicAnimator和UISnapBehavior动画示例(iOS打分动画) 详解链接: http://blog.csdn.net/u014220518/article/details/60868906