您的位置:首页 > 其它

常见的动画效果(二)

2013-03-13 17:48 253 查看
使用前

需引入QuartzCore.framework, 并在相关文件中加入
#import "QuartzCore/QuartzCore.h"

定义

shakeFeedbackOverlay为UIImageView

设置

self.shakeFeedbackOverlay.alpha = 0.0;

self.shakeFeedbackOverlay.layer.cornerRadius = 10.0; //设置圆角半径

1、图像左右抖动

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

shake.fromValue = [NSNumber numberWithFloat:-M_PI/32];

shake.toValue = [NSNumber numberWithFloat:+M_PI/32];

shake.duration = 0.1;

shake.autoreverses = YES; //是否重复

shake.repeatCount = 4;

[self.shakeFeedbackOverlay.layer addAnimation:shake forKey:@"shakeAnimation"];

self.shakeFeedbackOverlay.alpha = 1.0;

[UIView animateWithDuration:2.0 delay:0.0 options:UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionAllowUserInteraction animations:^{ self.shakeFeedbackOverlay.alpha = 0.0; //透明度变0则消失 } completion:nil];

2、图像顺时针旋转

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

shake.fromValue = [NSNumber numberWithFloat:0];

shake.toValue = [NSNumber numberWithFloat:2*M_PI];

shake.duration = 0.8; shake.autoreverses = NO;

shake.repeatCount = 1;

[self.shakeFeedbackOverlay.layer addAnimation:shake forKey:@"shakeAnimation"];

self.shakeFeedbackOverlay.alpha = 1.0;

[UIView animateWithDuration:10.0 delay:0.0 options:UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionAllowUserInteraction animations:^{ self.shakeFeedbackOverlay.alpha = 0.0; } completion:nil];

3、图像关键帧动画

CAKeyframeAnimation *animation = [CAKeyframeAnimation animation];
CGMutablePathRef aPath =CGPathCreateMutable();
CGPathMoveToPoint(aPath,
nil, 20, 20);
CGPathAddCurveToPoint(aPath,
nil, 160, 30, 220, 220, 240, 420);
animation.path = aPath;
animation.autoreverses =
YES;
animation.duration = 2;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
animation.rotationMode =
@"auto";
[ballView.layer addAnimation:animationforKey:@"position"];
4、组合动画 CAAnimationGroup

CABasicAnimation *flip = [CABasicAnimation animationWithKeyPath:@"transform.rotation.y"];
flip.toValue = [NSNumbernumberWithDouble:-M_PI];

CABasicAnimation *scale= [CABasicAnimation animationWithKeyPath:@"transform.scale"];
scale.toValue = [NSNumbernumberWithDouble:12];
scale.duration = 1.5;
scale.autoreverses = YES;

CAAnimationGroup *group = [CAAnimationGroup animation];
group.animations = [NSArray arrayWithObjects:flip, scale,nil];
group.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
group.duration = 3;
group.fillMode =
kCAFillModeForwards;
group.removedOnCompletion =NO;
[ballView.layer addAnimation:groupforKey:@"position"];
5、指定时间内旋转图片

//启动定时器旋转光圈
- (void)startRotate
{
self.rotateTimer = [NSTimer scheduledTimerWithTimeInterval:0.02

target:self
selector:@selector(rotateGraduation)
userInfo:nil
repeats:YES];
}
//关闭定时器
- (void)stopTimer
{
if ([self.rotateTimerisValid])
{
[self.rotateTimerinvalidate];
self.rotateTimer =nil;
}
}

//旋转动画
- (void)rotateGraduation
{
self.timeCount--;
if (self.timeCount == 0)
{
[self stopTimer];
// doSomeThing //旋转完毕 可以干点别的
self.timeCount = 25;
}
else
{
//计算角度
旋转
static CGFloat radian = 150 * (M_2_PI / 360);
CGAffineTransform transformTmp =self.lightImageView.transform;
transformTmp = CGAffineTransformRotate(transformTmp, radian);
self.lightImageView.transform= transformTmp;
};
}
调用方法

self.timeCount = 25; //动画执行25次

[self startRotate];

注:本文部分代码摘抄自《ios5核心框架》一书,原文有改动

6:移动图片到右下角

//向右下角缩小移动
- (IBAction)buttonClick:(id)sender
{

CGPoint fromPoint = imageView.center;

//路径曲线
UIBezierPath *movePath = [UIBezierPath bezierPath];
[movePath moveToPoint:fromPoint];
CGPoint toPoint = CGPointMake(300, 460);
[movePath addQuadCurveToPoint:toPoint
controlPoint:CGPointMake(toPoint.x,fromPoint.y)];

//关键帧
CAKeyframeAnimation *moveAnim = [CAKeyframeAnimation animationWithKeyPath:@"position"];
moveAnim.path = movePath.CGPath;
moveAnim.removedOnCompletion = YES;

//旋转变化
CABasicAnimation *scaleAnim = [CABasicAnimation animationWithKeyPath:@"transform"];
scaleAnim.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];
//x,y轴缩小到0.1,Z 轴不变
scaleAnim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.1, 0.1, 1.0)];
scaleAnim.removedOnCompletion = YES;

//透明度变化
CABasicAnimation *opacityAnim = [CABasicAnimation animationWithKeyPath:@"alpha"];
opacityAnim.fromValue = [NSNumber numberWithFloat:1.0];
opacityAnim.toValue = [NSNumber numberWithFloat:0.1];
opacityAnim.removedOnCompletion = YES;

//关键帧,旋转,透明度组合起来执行
CAAnimationGroup *animGroup = [CAAnimationGroup animation];
animGroup.animations = [NSArray arrayWithObjects:moveAnim, scaleAnim,opacityAnim, nil];
animGroup.duration = 1;
[imageView.layer addAnimation:animGroup forKey:nil];
}


7 :移动图片到右下角

//向右边旋转
- (IBAction)rightRotateBtnClick:(id)sender
{
CGPoint fromPoint = imageView.center;
UIBezierPath *movePath = [UIBezierPath bezierPath];
[movePath moveToPoint:fromPoint];
CGPoint toPoint = CGPointMake(fromPoint.x +100 , fromPoint.y) ;

[movePath addLineToPoint:toPoint];

CAKeyframeAnimation *moveAnim = [CAKeyframeAnimation animationWithKeyPath:@"position"];
moveAnim.path = movePath.CGPath;

CABasicAnimation *scaleAnim = [CABasicAnimation animationWithKeyPath:@"transform"];
scaleAnim.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];

//沿Z轴旋转
scaleAnim.toValue = [NSValue valueWithCATransform3D: CATransform3DMakeRotation(M_PI,0,0,1)];

//沿Y轴旋转
// scaleAnim.toValue = [NSValue valueWithCATransform3D: CATransform3DMakeRotation(M_PI,0,1.0,0)];

//沿X轴旋转
// scaleAnim.toValue = [NSValue valueWithCATransform3D: CATransform3DMakeRotation(M_PI,1.0,0,0)];
scaleAnim.cumulative = YES;
scaleAnim.duration =1;
//旋转2遍,360度
scaleAnim.repeatCount =2;
imageView.center = toPoint;
scaleAnim.removedOnCompletion = YES;
CAAnimationGroup *animGroup = [CAAnimationGroup animation];
animGroup.animations = [NSArray arrayWithObjects:moveAnim, scaleAnim, nil];
animGroup.duration = 2;

[imageView.layer addAnimation:animGroup forKey:nil];

}


8:图片旋转360度

//图片旋转360度
- (IBAction)rota360BtnClick:(id)sender
{
CABasicAnimation *animation = [ CABasicAnimation
animationWithKeyPath: @"transform" ];
animation.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];

//围绕Z轴旋转,垂直与屏幕
animation.toValue = [ NSValue valueWithCATransform3D:

CATransform3DMakeRotation(M_PI, 0, 0, 1.0) ];
animation.duration = 1;
//旋转效果累计,先转180度,接着再旋转180度,从而实现360旋转
animation.cumulative = YES;
animation.repeatCount = 2;

//在图片边缘添加一个像素的透明区域,去图片锯齿
CGRect imageRrect = CGRectMake(0, 0,imageView.frame.size.width, imageView.frame.size.height);
UIGraphicsBeginImageContext(imageRrect.size);
[imageView.image drawInRect:CGRectMake(1,1,imageView.frame.size.width-2,imageView.frame.size.height-2)];
imageView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

[imageView.layer addAnimation:animation forKey:nil];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: