标签:
一.//UIView动画
//能够做动画的属性, feame, center, bounds, alpha, transfom, backgroundcolor
//iOS4.0 之前如果想做动画, 必须放在开始可提交之前才有效
//对属性更改值是有效值, 最终会对视图作出修改
//开始动画
[UIView beginAnimations:nil context:nil];
//1.设置动画持续的时间 --- 单位 秒
[UIView setAnimationDuration:2];
//2.设置动画代理(但是不需要服从代理)
[UIView setAnimationDelegate:self];
//3.但是动画结束后执行的方法
[UIView setAnimationDidStopSelector:@selector(handleDidStop)];
//4.设置动画延迟的时间 --- 单位 秒
// [UIView setAnimationDelay:2];
//5.设置动画从当前状态发生变化
[UIView setAnimationBeginsFromCurrentState:YES];
//6.设置动画是否反转
[UIView setAnimationRepeatAutoreverses:YES];
//7.设置动画重复次数
[UIView setAnimationRepeatCount:10];
//8.设置动画变化的曲线
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
//center -- 视图位置
CGPoint center = self.redView.center;
center.y += 10;
self.redView.center = center;
self.redView.alpha = 0.1; //alpha -- 透明度
//transition 旋转--缩放
self.redView.transform = CGAffineTransformRotate(self.redView.transform, 0.5);
self.redView.transform = CGAffineTransformScale(self.redView.transform, 0.5, 0.5);
[UIView commitAnimations]; //提交动画
二.iOS4.0 之后 基于Block的动画 -- (Leo推荐)
//1.最简单的black 方法
[UIView animateWithDuration:4 animations:^{
//对属性更改, 做动画操作
//center -- 视图位置
CGPoint center = self.redView.center;
center.y += 10;
self.redView.center = center;
//alpha -- 透明度
self.redView.alpha = 0.1;
//transition 旋转--缩放
self.redView.transform = CGAffineTransformRotate(self.redView.transform, 0.5);
self.redView.transform = CGAffineTransformScale(self.redView.transform, 0.5, 0.5);
}];
//2.block 形式升级版 -- 可以检测动画结束时间
[UIView animateWithDuration:4 animations:^{
//对属性更改, 做动画操作
//center -- 视图位置
CGPoint center = self.redView.center;
center.y += 10;
self.redView.center = center;
//alpha -- 透明度
self.redView.alpha = 0.1;
//transition 旋转--缩放
self.redView.transform = CGAffineTransformRotate(self.redView.transform, 0.5);
self.redView.transform = CGAffineTransformScale(self.redView.transform, 0.5, 0.5);
} completion:^(BOOL finished) {
...
}];
//3.block 形式加强版 -- 不光可以捕获结束时间, 而且可以配置多个参数
[UIView animateWithDuration:4 delay:1 options:UIViewAnimationOptionAutoreverse animations:^{
//对属性更改, 做动画操作
//center -- 视图位置
CGPoint center = self.redView.center;
center.y += 10;
self.redView.center = center;
//alpha -- 透明度
self.redView.alpha = 0.1;
//transition 旋转--缩放
self.redView.transform = CGAffineTransformRotate(self.redView.transform, 0.5);
self.redView.transform = CGAffineTransformScale(self.redView.transform, 0.5, 0.5);
} completion:^(BOOL finished) {
...
}];
//4.弹簧效果
//1.持续时间; 2.延迟时间; 3.弹簧强度; 4.开始变化速度; 5.动画效果参数; 6.动画代码; 7.结束动画
[UIView animateWithDuration:4 delay:0 usingSpringWithDamping:0.01 initialSpringVelocity:10 options:UIViewAnimationOptionCurveEaseInOut animations:^{
//对属性更改, 做动画操作
//transition 旋转--缩放
self.thLabel.transform = CGAffineTransformScale(self.redView.transform, 1.2, 1.2);
} completion:nil];
三.过度动画 - 界面间的过度
[UIView transitionWithView:self.redView duration:4 options:UIViewAnimationOptionCurveEaseInOut animations:^{
//旋转
self.redView.transform = CGAffineTransformRotate(self.redView.transform, M_PI_2); // 旋转45°, M_PI_2 90°, M_PI_1 180°
} completion:nil];
//从一个视图切换到另一个视图
[UIView transitionFromView:self.redView toView:self.yellowView duration:1 options:UIViewAnimationOptionTransitionCurlDown completion:^(BOOL finished) {
/* self.yellowView = [[UIView alloc]initWithFrame:self.redView.frame]; */
//改变指针的指向
UIView *tempView = [self.redView retain];
self.redView = self.yellowView;
self.yellowView = tempView;
[tempView release];
}];
四.UIView 与 CALayer 的区别
//UIView 其实是CALayer 层的简单封装, 真正绘制显示内容的还是CAlayer 每一个视图都有一个layer 属性可以访问到自己的layer 层, UIView封装了常用的属性, 不常用的属性还是要设置CALayer
//1.设置视图边框的宽度
self.redView.layer.borderWidth = 2;
//设置视图边框的颜色
self.redView.layer.borderColor = [UIColor whiteColor].CGColor;
//3.设置视图的圆角
self.redView.layer.cornerRadius = 20;
//4.多余部分剪裁掉
self.redView.layer.masksToBounds = YES;
//5.设置视图的锚点 -- 旋转的基准点 (不设置默认为中心)
self.redView.layer.anchorPoint = CGPointMake(1, 1);
//基准点
self.redView.layer.position = CGPointMake(240, 360);
self.redView.transform = CGAffineTransformRotate(self.redView.transform, M_PI_4);
五.CA属性动画 -- (基本属性动画)
(1)
//CA动画修改属性值最终不会作用到视图
CABasicAnimation *basic = [CABasicAnimation animationWithKeyPath:@"opacity"];
//开始变化值
basic.fromValue = @(1.0);
//结束变化值
basic.toValue = @(0.1);
basic.duration = 2;
//添加到视图的layer 层
[self.redView.layer addAnimation:basic forKey:nil];
(2)
CABasicAnimation *basic = [CABasicAnimation animationWithKeyPath:@"position.x"];
//变化的开始值
basic.fromValue = @(self.cloud.center.x);
//变化的结束值
basic.toValue = @([UIScreen mainScreen].bounds.size.width + CGRectGetWidth(self.cloud.frame) / 2);
basic.duration = 5;
basic.repeatCount = 100;
//添加到视图的 layer 层
[self.cloud.layer addAnimation:basic forKey:nil];
六.CA属性动画 -- 关键帧动画
CAKeyframeAnimation *keyFrame = [CAKeyframeAnimation animationWithKeyPath:@"position"];
CGPoint point1 = self.cloud.center;
CGPoint point2 = CGPointMake(160, 45);
CGPoint point3 = CGPointMake([UIScreen mainScreen].bounds.size.width - 45, 425);
NSValue *value1 = [NSValue valueWithCGPoint:point1];
NSValue *value2 = [NSValue valueWithCGPoint:point2];
NSValue *value3 = [NSValue valueWithCGPoint:point3];
keyFrame.values = @[value1, value2, value3, value1];
keyFrame.duration = 10;
keyFrame.repeatCount = 100;
[self.cloud.layer addAnimation:keyFrame forKey:nil];
七.CA过度动画
CATransition *transtion = [CATransition animation];
//配置过度动画类型
transtion.type = @"cube";
//配置过度动画方向
transtion.subtype = kCATransitionFromLeft;
//添加到视图layer 层
[self.redView.layer addAnimation:transtion forKey:nil];
/* 过渡效果 (苹果私有)
fade //交叉淡化过渡(不支持过渡方向) kCATransitionFade
push //新视图把旧视图推出去 kCATransitionPush
moveIn //新视图移到旧视图上面 kCATransitionMoveIn
reveal //将旧视图移开,显示下面的新视图 kCATransitionReveal
cube //立方体翻滚效果
oglFlip //上下左右翻转效果
suckEffect //收缩效果,如一块布被抽走(不支持过渡方向)
rippleEffect //滴水效果(不支持过渡方向)
pageCurl //向上翻页效果
pageUnCurl //向下翻页效果
cameraIrisHollowOpen //相机镜头打开效果(不支持过渡方向)
cameraIrisHollowClose //相机镜头关上效果(不支持过渡方向)
*/
八.CA分组动画
//1.关键帧动画 -- 沿圆形轨迹移动
CAKeyframeAnimation *keyframe = [CAKeyframeAnimation animationWithKeyPath:@"position"];
//绘制半圆路径
CGFloat y = [UIScreen mainScreen].bounds.size.width - 100;
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(0, y) radius:y startAngle:-M_PI_2 endAngle:M_PI_2 clockwise:YES];
//关键帧动画给上圆形轨迹
keyframe.path = path.CGPath; // 让 UIBezierPath 作为移动轨迹
keyframe.duration = 5;
keyframe.repeatCount = 100;
//2.关键帧动画 -- 气球的放大缩小
CAKeyframeAnimation *keyFrame1 = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"];
keyFrame1.values = @[@(1.0), @(1.2), @(1.4), @(1.6), @(1.8), @(2.0), @(1.8), @(1.6), @(1.4), @(1.2), @(1.0)];
keyFrame1.duration = 5;
//创建分组动画
CAAnimationGroup *group = [CAAnimationGroup animation];
group.animations = @[keyframe, keyFrame1];
group.duration = 5;
group.repeatCount = 1000;
[self.balloon.layer addAnimation:group forKey:nil];
标签:
原文地址:http://www.cnblogs.com/tapple/p/4817458.html