使用前 需引入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:
{
CAKeyframeAnimation *frame=[CAKeyframeAnimation animation];
CGFloat left=-M_PI_2*0.125;
CGFloat right=M_PI_2*0.125;
frame.keyPath=@"postion";
frame.keyPath=@"transform.rotation";
frame.values=@[@(left),@(right),@(left)];
frame.duration = 0.5;
frame.repeatCount = 1000000;
[cell.layer addAnimation:frame forKey: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 = [CAKeyframeAnimationanimation]; 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 = [CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseOut]; animation.rotationMode = @"auto"; [ballView.layer addAnimation:animation forKey:@"position"]; 4、组合动画 CAAnimationGroup CABasicAnimation *flip = [CABasicAnimationanimationWithKeyPath:@"transform.rotation.y"]; flip.toValue = [NSNumbernumberWithDouble:-M_PI]; CABasicAnimation *scale= [CABasicAnimationanimationWithKeyPath:@"transform.scale"]; scale.toValue = [NSNumbernumberWithDouble:12]; scale.duration = 1.5; scale.autoreverses = YES; CAAnimationGroup *group = [CAAnimationGroupanimation]; group.animations = [NSArrayarrayWithObjects:flip, scale, nil]; group.timingFunction = [CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseInEaseOut]; group.duration = 3; group.fillMode = kCAFillModeForwards; group.removedOnCompletion = NO; [ballView.layer addAnimation:group forKey:@"position"]; 5、指定时间内旋转图片 //启动定时器 旋转光圈 - (void)startRotate { self.rotateTimer = [NSTimer scheduledTimerWithTimeInterval:0.02 target:self selector:@selector(rotateGraduation) userInfo:nil repeats:YES]; } //关闭定时器 - (void)stopTimer { if ([self.rotateTimer isValid]) { [self.rotateTimer invalidate]; 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];
转载自:http://www.cnblogs.com/sell/archive/2013/02/01/2889013.html