博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS那些简单的动画,属性详解和转场动画
阅读量:3784 次
发布时间:2019-05-22

本文共 3786 字,大约阅读时间需要 12 分钟。

关于 Core Animation


Core Animation是一组非常强大的动画处理API,使用它能做出很多优雅的动画效果。能用的动画类有4个子类:CABasicAnimation、CAKeyframeAnimation、CATransition、CAAnimationGroup


开发步骤:


1. 初始化一个动画对象(CAAnimation)并设置一些动画相关属性.

2. 添加动画对象到层(CALayer)中,开始执行动画.


CALayer中很多属性都可以通过CAAnimation实现动画效果, 包括opacity, position, transform, bounds, contents等,具体可以在API文档中查找

通过调用CALayer的addAnimation:forKey:增加动画到层(CALayer)中,这样就能触发动画了.通过调用removeAnimationForKey:可以停止层中的动画.


注:Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程.


属性 解读
Autoreverses 设定这个属性为 YES 时,在它到达目的地之后,动画的返回到开始的值,代替了直接跳转到开始的值,过渡平滑
Duration 设定开始值到结束值花费的时间。期间会被速度的属性所影响
RemovedOnCompletion 这个属性默认为 YES,在指定的时间段完成后,动画就自动的从层上移除了。
FillMode 这个属性一般和 RemovedOnCompletion 配合使用,保持动画状态。其中kCAFillModeForwards 当动画结束后,layer会一直保持着动画最后的状态.此时将RemovedOnCompletion设为NO
Speed 默认的值为 1.0.如果你改变这个值为 2.0,动画会用 2 倍的速度播放。这样的影响就是使持续时间减半。如果你指定的持续时间为 6 秒,速度为 2.0,动画就会播放 3 秒钟即一半的持续时间。
RepeatCount 默认的是 0,动画只会播放一次。如果指定一个无限大的重复次数,使用 MAXFLOAT 。这个不应该和 repeatDration 属性一块使用
RepeatDuration 这个属性指定了动画应该被重复多久。动画会一直重复,直到设定的时间用完。同上它不应该和 repeatCount 一起使用
FromValue 设置动画的初始值
ToValue 设置动画的到达值
TimingFunction 控制动画运行的节奏.    kCAMediaTimingFunctionLinear(线性):匀速,给你一个相对静态的感觉    kCAMediaTimingFunctionEaseIn(渐进):动画缓慢进入,然后加速离开    kCAMediaTimingFunctionEaseOut(渐出):动画全速进入,然后减速的到达目的地    kCAMediaTimingFunctionEaseInEaseOut(渐进渐出):动画缓慢的进入,中间加速,然后减速的到达目的地。这个是默认的动画行为。
BeginTime 可以用来设置动画延迟执行时间,若想延迟1s,就设置为CACurrentMediaTime()+1,CACurrentMediaTime()为图层的当前时间


巧妙的运用这些可以属性实现很棒的动画效果,比如下面:用CABasicAnimation实现的动画


CABasicAnimation动画


简单的呼吸和摇摆动画




简单的代码


1.呼吸动画

CABasicAnimation *animation =[CABasicAnimation animationWithKeyPath:@"opacity"];

animation.fromValue = [NSNumber numberWithFloat:1.0f];

animation.toValue = [NSNumber numberWithFloat:0.0f];

animation.autoreverses = YES;    //回退动画(动画可逆,即循环)

animation.duration = 1.0f;

animation.repeatCount = MAXFLOAT;

animation.removedOnCompletion = NO;

animation.fillMode = kCAFillModeForwards;//removedOnCompletion,fillMode配合使用保持动画完成效果

animation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];

[self.alphaTagButton.layer addAnimation:animation forKey:@"aAlpha"];

2.摇摆动画

//设置旋转原点

self.sharkTagButton.layer.anchorPoint = CGPointMake(0.5, 0);

CABasicAnimation* rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];

//角度转弧度(这里用1,-1简单处理一下)

rotationAnimation.toValue = [NSNumber numberWithFloat:1];

rotationAnimation.fromValue = [NSNumber numberWithFloat:-1];

rotationAnimation.duration = 1.0f;

rotationAnimation.repeatCount = MAXFLOAT;

rotationAnimation.removedOnCompletion = NO;

rotationAnimation.autoreverses = YES;

rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

rotationAnimation.fillMode = kCAFillModeForwards;

[self.sharkTagButton.layer addAnimation:rotationAnimation forKey:@"revItUpAnimation"];


CATransition之简单的转场动画


CAAnimation的子类,用于做转场动画,能够为层提供移出屏幕和移入屏幕的动画效果。


属性 解读
type 动画过渡类型
subtype 动画过渡方向


  • 常用动画类型:


type的值 解读 对应常量
fade 淡入淡出 kCATransitionFade
push 推挤 kCATransitionPush
reveal 揭开 kCATransitionReveal
moveIn 覆盖 kCATransitionMoveIn
cube 立方体 私有API
suckEffect 吮吸 私有API
oglFlip 翻转 私有API
rippleEffect 波纹 私有API
pageCurl 反翻页 私有API
cameraIrisHollowOpen 开镜头 私有API
cameraIrisHollowClose 关镜头 私有API


注:私有API只能通过字符串使用


过渡方向参数:


subtype的值 解读
kCATransitionFromRight 从右转场
kCATransitionFromLeft 从左转场
kCATransitionFromBottom 从下转场
kCATransitionFromTop 从上转场


简单的CATransition动画


-(void)animationWithType:(NSString*)type

{

//- 创建一个转场动画:

CATransition *transition = [CATransition animation];

transition.repeatCount = 5;

//    - 确定动画类型:

transition.type = type;

//    - 确定子类型(方向等)

transition.subtype = kCATransitionFromLeft;

//    - 确定动画时间

transition.duration = 1;

//    - 添加动画

[self.imageView.layer addAnimation:transition forKey:nil];

}


使用时只用传你的想要的动画类型就好,私有API只能通过字符串使用哈。


[self animationWithType:self.dataArray[indexPath.row]];


DEMO地址:

转载地址:http://jaevn.baihongyu.com/

你可能感兴趣的文章
结构型模式——装饰者设计模式
查看>>
线程的同步——Synchronized和ReentrantLock
查看>>
网络编程基础
查看>>
python实现快速排序
查看>>
python实现归并排序
查看>>
ptqt5控件了解(三)
查看>>
自学C++(一)
查看>>
51单片机介绍(二)
查看>>
STM32F103 入门篇-5-初识STM32
查看>>
后台框架的frameset
查看>>
Spring Jdbc
查看>>
Spring 事务管理
查看>>
spring与mybatis的整合
查看>>
json数据交换和RESTful支持
查看>>
spring中的拦截器
查看>>
文件上传和下载
查看>>
Oracle指令,软件架构,
查看>>
oracle5:oracle的图形界面操作,分页查询,练习
查看>>
密码学基础之对称密码体制和公钥密码体制
查看>>
Spark Streaming进阶
查看>>