对于动画的使用,其实一直以来就不是很熟悉,因为平时使用的也少,使用也只是简单的使用.其实关于动画,一直在IOS中广泛存在.有时我们在调用某个方法时,经常会有一个参数Animation,填入BOOL参数,选择是否需要动画效果.
今天我就浅谈一下几种基本动画的实现.
首先为了测试动画效果,我随便声明了一个View.
self.animationView = [[UIView alloc] initWithFrame:CGRectMake(50 , 100 , 100, 50)];
self.animationView.backgroundColor = [UIColor blueColor];
[self.view addSubview:self.animationView]; //初始化位置,并且赋颜色,用于测试
首先,是简单的移动,从一个位置移动到另一个位置.用UIView动画就可以
[UIView animateWithDuration:0.5 animations:^{ //其中duration是动画时间参数,还有几个差不多的方法,就不一一列举了
// self.animationView.frame = CGRectMake(0, 451, 375, 216);
//
// }];
[UIView animateWithDuration:0.5 delay:3 options:UIViewAnimationOptionRepeat animations:^{ //delay参数表示延时几秒进行,options参数是枚举值,填入不同的,有不同效果,这个枚举值表示重复
// self.animationView.frame = CGRectMake(0, 451, 375, 216);
} completion:^(BOOL finished) {
}];
//接下来是颤抖效果
[UIView animateWithDuration:0.5 delay:2 usingSpringWithDamping:0.01 initialSpringVelocity:10 options:UIViewAnimationOptionAllowAnimatedContent animations:^{
// NSLog(@"wowoow");
// vc.animationView.frame = CGRectMake(0, 451, 375, 216);
//
// } completion:^(BOOL finished) {
//
//
// }];
接下来是2D仿射变换
//1.rotate 旋转
//2.M_PI 圆周率 M_PI = 180度
// [UIView beginAnimations:@"键盘" context:nil];
// [UIView setAnimationDuration:0.5];
// self.animationView.transform = CGAffineTransformRotate(self.animationView.transform, M_LOG10E); //效果是旋转一定角度,第二个参数填入的时角度值
缩放和向下向左移动
//缩放
// self.animationView.transform = CGAffineTransformScale(self.animationView.transform, 0.5, 0.5);
//参数1.向右
//参数2.向下
//self.animationView.transform = CGAffineTransformTranslate(self.animationView.transform, 0, 10);
除了以上的动画方式外,还有CALayer动画
CABasicAnimation *basicAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];//rotation表示旋转,scale表示缩放.
basicAnimation.duration = 2;//动画时间
//重复次数
basicAnimation.repeatCount = NSIntegerMax; //无限重复
//是否恢复到原来的状态
basicAnimation.autoreverses = NO;
//是从什么状态开始动画
basicAnimation.fromValue = [NSNumber numberWithInt:0];
//是从什么状态结束动画
basicAnimation.toValue = [NSNumber numberWithInt:4];
[self.animationView.layer addAnimation:basicAnimation forKey:@"键盘"];
当然合一把旋转和缩放一起添加入动画组,使之实现旋转的过程中进行缩放
CAAnimationGroup *group = [CAAnimationGroup animation];
group.animations = @[basicAnimation, basicAnimation1];
group.repeatCount = NSIntegerMax;
group.autoreverses = YES;
group.duration = 2;
[self.animationView.layer addAnimation:group forKey:@"wowowoo"];
#pragma mark -- 关键帧动画 关键帧动画可以让你的view的layer按照预定的轨迹做动画.
CAKeyframeAnimation *keyFrameAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
//创建路径
CGMutablePathRef path = CGPathCreateMutable();
//创建路径的起始坐标 起始点是锚点 也就是中心点
CGPathMoveToPoint(path, NULL, self.animationView.center.x, self.animationView.center.y);
//设置画面移动的点
CGPathAddLineToPoint(path, NULL, 100, 100);
CGPathAddLineToPoint(path, NULL, 150, 120);
CGPathAddLineToPoint(path, NULL, 100, 140);
CGPathAddLineToPoint(path, NULL, 150, 160);
CGPathAddLineToPoint(path, NULL, 100, 180);
CGPathAddLineToPoint(path, NULL, 150, 200);
//设置动画移动的曲线轨迹
CGPathAddCurveToPoint(path, NULL, 20, 40, 100, 140, 200, 60);
CGPathAddCurveToPoint(path, NULL, 10, 140, 80, 110, self.animationView.center.x , self.animationView..center.y);
[keyFrameAnimation setPath:path];
[keyFrameAnimation setDuration:5];
[self.animationView..layer addAnimation:keyFrameAnimation forKey:@"key"];
这些都是动画的基本方法,想要实现复杂的想过,就需要靠自己的逻辑思维来实现了.