iOS常用的一些动画效果,UIView封装的动画,CALayer的动画等

1.UIView封装的动画
1> 首尾式
[UIView beginAnimations:nil context:nil];
// ... 需要执行怎样的动画
[UIView commitAnimations];

2> block
[UIView animateWithDuration:0.5 animations:^{
    // 需要执行的动画
} completion:^(BOOL finished) {
    // 动画完成
}];

3> 转场动画(过渡动画)
// 让某个view执行转场动画
[UIView transitionWithView:<#(UIView *)#> duration:<#(NSTimeInterval)#> options:<#(UIViewAnimationOptions)#> animations:<#^(void)animations#> completion:<#^(BOOL finished)completion#>];

2.CALayer的动画
// CABasicAnimation和CAKeyframeAnimation的keyPath可以是哪些值?
// 在xcode文档搜索:CALayer Animatable Properties
// transform的具体属性:搜索catransform3d key path
1> CABasicAnimation
* fromValue  初始值 
* toValue  最终值  (从初始化变化到最后某一个值)
* byValue  步进值  (在初始值的基础上,增加多少值)

2> CAKeyframeAnimation
* values

3> CATransition(转场动画)
CATransition *anim = [CATransition animation];
anim.type = @"cube";
anim.subtype = kCATransitionFromBottom;
[view.layer addAnimation:anim forKey:nil];

4> CAAnimationGroup
* 动画,可以同时执行多个动画

3.如何选择动画
1> 如果需要重复执行多次动画,最好选择CALayer动画
2> 如果动画执行完毕后,就要用到前面的一些东西,最好选择UIView的block动画
3> 如果需要同时执行多个动画,最好选择CAAnimationGroup
4> UIView动画和CALayer动画中最灵活的是CALayer的动画

4.自定义一些动画
用CADisplayLink,在刷帧方法完成需要执行的动画
封装了常见的动画类,很好用 注释非常详细 如下: + (void)showAnimationType:(NSString *)type withSubType:(NSString *)subType duration:(CFTimeInterval)duration timingFunction:(NSString *)timingFunction view:(UIView *)theView { /** CATransition * * @see http://www.dreamingwish.com/dream-2012/the-concept-of-coreanimation-programming-guide.html * @see http://geeklu.com/2012/09/animation-in-ios/ * * CATransition 常用设置及属性注解如下: */ CATransition *animation = [CATransition animation]; /** delegate * * 动画的代理,如果你想在动画开始和结束的时候做一些事,可以设置此属性,它会自动回调两个代理方法. * * @see CAAnimationDelegate (按下command键点击) */ animation.delegate = self; /** duration * * 动画持续时间 */ animation.duration = duration; /** timingFunction * * 用于变化起点和终点之间的插值计算,形象点说它决定了动画运行的节奏,比如是均匀变化(相同时间变化量相同)还是 * 先快后慢,先慢后快还是先慢再快再慢. * * 动画的开始与结束的快慢,有五个预置分别为(下同): * kCAMediaTimingFunctionLinear 线性,即匀速 * kCAMediaTimingFunctionEaseIn 先慢后快 * kCAMediaTimingFunctionEaseOut 先快后慢 * kCAMediaTimingFunctionEaseInEaseOut 先慢后快再慢 * kCAMediaTimingFunctionDefault 实际效果动画中间比较快. */ /** timingFunction * * 当上面的预置不能满足你的需求的时候,你可以使用下面的两个方法来自定义你的timingFunction * 具体参见下面的URL * * @see http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/CAMediaTimingFunction_class/Introduction/Introduction.html * * + (id)functionWithControlPoints:(float)c1x :(float)c1y :(float)c2x :(float)c2y; * * - (id)initWithControlPoints:(float)c1x :(float)c1y :(float)c2x :(float)c2y; */ animation.timingFunction = [CAMediaTimingFunction functionWithName:timingFunction]; /** fillMode * * 决定当前对象过了非active时间段的行为,比如动画开始之前,动画结束之后. * 预置为: * kCAFillModeRemoved 默认,当动画开始前和动画结束后,动画layer都没有影响,动画结束后,layer会恢复到之前的状态 * kCAFillModeForwards 当动画结束后,layer会一直保持着动画最后的状态 * kCAFillModeBackwards 和kCAFillModeForwards相对,具体参考上面的URL * kCAFillModeBoth kCAFillModeForwards和kCAFillModeBackwards在一起的效果 */ animation.fillMode = kCAFillModeForwards; /** removedOnCompletion * * 这个属性默认为YES.一般情况下,不需要设置这个属性. * * 但如果是CAAnimation动画,并且需要设置 fillMode 属性,那么需要将 removedOnCompletion 设置为NO,否则 * fillMode无效 */ // animation.removedOnCompletion = NO; /** type * * 各种动画效果 其中除了'fade', `moveIn', `push' , `reveal' ,其他属于似有的API(我是这么认为的,可以点进去看下注释). * ↑↑↑上面四个可以分别使用'kCATransitionFade', 'kCATransitionMoveIn', 'kCATransitionPush', 'kCATransitionReveal'来调用. * @"cube" 立方体翻滚效果 * @"moveIn" 新视图移到旧视图上面 * @"reveal" 显露效果(将旧视图移开,显示下面的新视图) * @"fade" 交叉淡化过渡(不支持过渡方向) (默认为此效果) * @"pageCurl" 向上翻一页 * @"pageUnCurl" 向下翻一页 * @"suckEffect" 收缩效果,类似系统最小化窗口时的神奇效果(不支持过渡方向) * @"rippleEffect" 滴水效果,(不支持过渡方向) * @"oglFlip" 上下左右翻转效果 * @"rotate" 旋转效果 * @"push" * @"cameraIrisHollowOpen" 相机镜头打开效果(不支持过渡方向) * @"cameraIrisHollowClose" 相机镜头关上效果(不支持过渡方向) */ /** type * * kCATransitionFade 交叉淡化过渡 * kCATransitionMoveIn 新视图移到旧视图上面 * kCATransitionPush 新视图把旧视图推出去 * kCATransitionReveal 将旧视图移开,显示下面的新视图 */ animation.type = type; /** subtype * * 各种动画方向 * * kCATransitionFromRight; 同字面意思(下同) * kCATransitionFromLeft; * kCATransitionFromTop; * kCATransitionFromBottom; */ /** subtype * * 当type为@"rotate"(旋转)的时候,它也有几个对应的subtype,分别为: * 90cw 逆时针旋转90° * 90ccw 顺时针旋转90° * 180cw 逆时针旋转180° * 180ccw 顺时针旋转180° */ /** * type与subtype的对应关系(必看),如果对应错误,动画不会显现. * * @see http://iphonedevwiki.net/index.php/CATransition */ animation.subtype = subType; /** * 所有核心动画和特效都是基于CAAnimation,而CAAnimation是作用于CALayer的.所以把动画添加到layer上. * forKey 可以是任意字符串. */ [theView.layer addAnimation:animation forKey:nil]; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值