使用block
使用前需引入QuartzCore.framework, 并在相关文件中加入 #import"QuartzCore/QuartzCore.h"
定义
shakeFeedbackOverlay为UIImageView
设置
self.shakeFeedbackOverlay.alpha= 0.0;
self.shakeFeedbackOverlay.layer.cornerRadius= 10.0;
self.shakeFeedbackOverlay.layer masksToBounds = YES;
1、图像左右抖动
CABasicAnimation* shake =[CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
shake.fromValue = [NSNumbernumberWithFloat:-M_PI/32];
shake.toValue = [NSNumbernumberWithFloat:+M_PI/32];
shake.duration = 0.1;
shake.autoreverses = YES;//是否重复
shake.repeatCount = 4;
[self.shakeFeedbackOverlay.layeraddAnimation:shake forKey:@"shakeAnimation"];
self.shakeFeedbackOverlay.alpha= 1.0;
[UIView animateWithDuration:2.0delay:0.0 options:UIViewAnimationOptionCurveEaseIn |UIViewAnimationOptionAllowUserInteraction animations:^{self.shakeFeedbackOverlay.alpha = 0.0; //透明度变0则消失 } completion:nil];
2、图像顺时针旋转
CABasicAnimation* shake = [CABasicAnimationanimationWithKeyPath:@"transform.rotation.z"];
shake.fromValue = [NSNumbernumberWithFloat:0];
shake.toValue = [NSNumbernumberWithFloat:2*M_PI];
shake.duration = 0.8;shake.autoreverses = NO;
shake.repeatCount = 1;
[self.shakeFeedbackOverlay.layeraddAnimation:shake forKey:@"shakeAnimation"];
self.shakeFeedbackOverlay.alpha= 1.0;
[UIViewanimateWithDuration: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.layeraddAnimation:animation forKey:@"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 = [NSArrayarrayWithObjects:flip, scale, nil];
group.timingFunction =[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
group.duration = 3;
group.fillMode =kCAFillModeForwards;
group.removedOnCompletion = NO;
[ballView.layeraddAnimation:group forKey:@"position"];
5、指定时间内旋转图片
//启动定时器旋转光圈
- (void)startRotate
{
self.rotateTimer = [NSTimerscheduledTimerWithTimeInterval: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)
{
[selfstopTimer];
//doSomeThing //旋转完毕 可以干点别的
self.timeCount= 25;
} else
{
//计算角度 旋转
staticCGFloat radian = 150 * (M_2_PI / 360);
CGAffineTransformtransformTmp = self.lightImageView.transform;
transformTmp= CGAffineTransformRotate(transformTmp, radian);
self.lightImageView.transform= transformTmp;
};
}
调用方法
self.timeCount = 25; //动画执行25次
[self startRotate];
1 2 3 4 5 |
最后那个 static CGFloat radian = 150 * (M_2_PI / 360);
应该改为 static CGFloat radian = 150 * (M_PI * 2 / 360); |
//图片的淡入淡出
// 淡入显示新View
// imgagee.alpha = 0.0f;
// [UIView beginAnimations:@"fadeIn" context:nil];
[self.view addSubview:imgagee];
// [UIView setAnimationDuration:4.0];
// imgagee.alpha = 1.0f;
// [UIView commitAnimations];
// 淡出移除当前View
imgagee.alpha= 1.0f;
[UIView beginAnimations:@"fadeIn" context:nil];
[UIView setAnimationDuration:3];
imgagee .alpha = 0.0f;
[UIView commitAnimations];
//视图抖动动画
// 视图抖动动画
+ (void)shakeView:(UIView *)viewduration:(CGFloat)fDuration
{
if (view && (fDuration>= 0.1f))
{
CABasicAnimation*shake = [CABasicAnimationanimationWithKeyPath:@"transform.rotation.z"];
//设置抖动幅度
shake.fromValue= [NSNumber numberWithFloat:-0.3];
shake.toValue= [NSNumber numberWithFloat:+0.3];
shake.duration= 0.1f;
shake.repeatCount= fDuration/4/0.1f;
shake.autoreverses= YES;
[view.layeraddAnimation:shake forKey:@"shakeView"];
}else{}
}