UI中的动画分为UIView提供的动画和layer提供的动画
UIView提供的动画
起始设置一个imageView的属性,并且位置大小为CGRectMake(100,400,150,150);
第一种
//Duration 动画的时间间隔
[UIView animateWithDuration:3 animations:^{
//动画内容写在block中
self.imageView.frame = CFRectMake(100,100,50);
];
第二种
//在动画结束的时候我可以去写别的动画据需让它去执行
[UIView animateWithDuration:5 animations:^{
self.imageView.frame = CGRectMake(100,50,50,50);
self.imageView.aplha = 0.2//透明度
} completion:^(BOOL finished){
//当动画结束的时候再执行另外的一个UIView动画,平滑的缩放
[UIView animateWithDuration:3 animation:^{
self.imageView.frame = CGRectMake(100,300,150,150);
self.imageView.alpha = 1.0;
}];
}];
第三个方法
[UIView animateWithDuration:3 delay:0 options:UIViewAnimationOptionRepeat animations:^{
self.imageView.frame = CGRectMake(100,100,50,50);
self.imageView.alpha = 0.2;
} completion:^(BOOL finished){
self.imageView.frame = CGRectMake(100,300,150,150);
self.imageView.alpha = 1.0;
}];
第四种动画
//第三个参数:设置的越小,抖动越厉害
//第四个参数:设置越大,图片的初速度越快
[UIView animateWithDuration:3 delay:0 usingSpringWithDamping:0.1 initialSpringVelocity:50 options:UIViewANimationOptionRepeat animations:^{
self.imageView.frame = CGRectMake(100,100,200,200);
} completion:^(BOOL finished){
self.imageView.frame = CGRectMake(100,300,150,150);
}];
transform动画
//对视图进行旋转的操作
//第二个参数:设置旋转的弧度
self.imageView.transform = CGAffineTransformRotate(self.imageView.transform,M_PI_4);
//对视图进行缩放
//第二三个参数是设置缩放的比例
self.imageView.transform = CGAffineTransformTranslate(self.imageView.transform,-50 50 );
Layer动画
layer 主要负责显示空间的一些设置信息,比如边框,弧度等,layer动画的种类很多,我们看见的UIView的动画也是封装了几个layer动画
第一种
//创建一个动画效果
CATransition *transition = [CATransition animation];
//设置动画的种类
//其中种类得写成字符串的类型.在引号里写上类型
//pageCurl 向上翻一页 pageUnCurl 向下翻一页 rippleEffect 滴水效果 suckEffect 收缩效果,如一块布被抽走 cube 立方体效果 oglFlip 上下翻转效果
transition.type = @"rippleEffect";
//设置动画时长
[transition setDuration:3];
//设置动画重复次数
//NSIntegerMax 整数的最大值
[transition setRepeatCount:NSintegerMax];
//向imageView上添加动画效果,添加到imageview的layer上
[self.imageView.layer addAnimation:transition forKey:@"transition"];
layer的第二种
CABasicAnimation *basic = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
//对layer动画设置很多需要kvc的方式赋值,就是需要通过给定一个可以,在去设置
//动画时长
[basic setDuration:3];
//动画执行次数
[basic setRepeatCount:NSIntegerMax];
//这个动画设置的是一个缩放效果.所以需要给定一个开始的初始值
basic.fromValue = [NSMuber numberWithInt:1];
//再设置一个结束的值
basic.toValue = [NSNumber numberWithInt:0.5];
//toValue 和 fromValue 需要一个id类型的队形
//把动画添加到imageView上
[self.imageView.layer addAnimation:basic forKey:@"basic"];
//让图片进行旋转
CABasicAnimation *basic = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
//设置角度
basic.fromValue = [NSNumber numberWithFloat:0.0];
basic.toValue = [NSNumber numberWithFloat: 2 * M_PI];
//设置动画时长
[basic setDuration:4];
//设置动画次数
[basic setRepeatCount:NSIntegerMax];
//添加动画
[self.imageView.layer addAnimation:basic forKey:@"basic"];
[bsic setAutoreverses:YES];
关键帧动画
CAKeyframeAnimation *keyAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
//给坐标创建一个行走的路径,用来记录移动的关键坐标
CGMutablePathRef paht = CGPathCreateMutable();
//指定起始的坐标位置
//第一个参数:用Path来保存起始路径
//第二个参数:NULL
//第三四个参数:要移动的空间的起始坐标
CGPathMoveToPoint(Path,NULL,self.imageView.frame.origin.x,self.imageView.frame.origin.y);
//设置视图的移动轨迹
CGPathAddLineToPoint(path,NULL,100,100);
CGPathAddLineToPoint(path,NULL,10,20);
CGPathAddLineToPoint(path,NULL,140,200);
//设置一个曲线路径
CGPathAddCurveToPoint(path,NULL,200 ,200,200,100,120,40);
CGPathAddCurveToPoint(path,NULL,80,10,12,100,300,100);
CGPathAddCurveToPoint(path,NULL,90,20,100,200,150,150);
//设置动画时长和重复次数
[keyAnimation setDuration:10];
[keyAnimation setRepeatCount:NSIntegerMax];
//把设计好的路线放到动画里
[keyAnimation setPath:path];
//把动画添到视图上
[self.imageView.layer addAnimation:keyAnimation forKey:@"keyAnimation"];
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-05 05:02:39