【iOS动画工具类】分享给大家,后期我会不断维护

【【iOS动画工具类】分享给大家,后期我会不断维护】最近利用工作之余总结了下项目中简单的动画,分享给大家,后期我会继续维护,并增加新的方法,大家有喜欢的可以关注我并收藏下。

//带弹簧效果的点赞放大 //sx :表示x轴偏移 //sy:表示y轴偏移位置 //sz :表示z轴偏移 + (void) shakeToShow:(UIView*)aView{ CAKeyframeAnimation* animation = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; animation.duration = 1.0; NSMutableArray *values = [NSMutableArray array]; [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(0.1, 0.1, 1.0)]]; [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.4, 1.4, 1.0)]]; [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(0.9 , 0.9, 1.0)]]; [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 1.0)]]; animation.values = values; [aView.layer addAnimation:animation forKey:nil]; }//弹窗带弹簧抖动 + (void) animationAlert:(UIView *)viewbig {CAKeyframeAnimation *popAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; popAnimation.duration = 0.4; popAnimation.values = @[[NSValue valueWithCATransform3D:CATransform3DMakeScale(0.01f, 0.01f, 1.0f)], [NSValue valueWithCATransform3D:CATransform3DMakeScale(1.1f, 1.1f, 1.0f)], [NSValue valueWithCATransform3D:CATransform3DIdentity]]; popAnimation.keyTimes = @[@0.0f, @0.5f, @0.75f, @1.0f]; popAnimation.timingFunctions = @[[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; [viewbig.layer addAnimation:popAnimation forKey:nil]; }//控件左右抖动下,类似摇一摇抖动下 +(void)animationLeftAndRigVibrationhtWithView:(UIView*)view{ CAKeyframeAnimation * keyAnimaion = [CAKeyframeAnimation animation]; keyAnimaion.keyPath = @"transform.rotation"; keyAnimaion.values = @[@(-30 / 180.0 * M_PI),@(30 /180.0 * M_PI),@(-30/ 180.0 * M_PI)]; //度数转弧度 keyAnimaion.removedOnCompletion = NO; keyAnimaion.fillMode = kCAFillModeRemoved; keyAnimaion.duration = 0.3; keyAnimaion.repeatCount = 2; [view.layer addAnimation:keyAnimaion forKey:nil]; }/** 控件抖动动画 @param viewToShake 控件 */ + (void)shakeView:(UIView*)viewToShake{ CGFloat t =4.0; CGAffineTransform translateRight=CGAffineTransformTranslate(CGAffineTransformIdentity, t,0.0); CGAffineTransform translateLeft =CGAffineTransformTranslate(CGAffineTransformIdentity,-t,0.0); viewToShake.transform = translateLeft; [UIView animateWithDuration:0.07 delay:0.0 options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat animations:^{ [UIView setAnimationRepeatCount:2.0]; viewToShake.transform = translateRight; } completion:^(BOOL finished){ if(finished){ [UIView animateWithDuration:0.05 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ viewToShake.transform =CGAffineTransformIdentity; } completion:NULL]; } }]; }/** 加入购物车的动画效果 @param goodsImage 商品图片 @param startPoint 动画起点 @param endPoint动画终点 @param completion 动画执行完成后的回调 */ + (void)addToShoppingCartWithGoodsImage:(UIView *)goodsImage startPoint:(CGPoint)startPoint endPoint:(CGPoint)endPoint completion:(void (^)(BOOL))completion{//------- 创建shapeLayer -------// //CAShapeLayer *animationLayer = [[CAShapeLayer alloc] init]; //animationLayer.frame = CGRectMake(startPoint.x - 20, startPoint.y - 20, 40, 40); //animationLayer.contents = (id)goodsImage; // 获取window的最顶层视图控制器 UIViewController *rootVC = [[UIApplication sharedApplication].delegate window].rootViewController; UIViewController *parentVC = rootVC; while ((parentVC = rootVC.presentedViewController) != nil ) { rootVC = parentVC; } while ([rootVC isKindOfClass:[UINavigationController class]]) { rootVC = [(UINavigationController *)rootVC topViewController]; }// 添加layer到顶层视图控制器上 //[rootVC.view.layer addSublayer:animationLayer]; //------- 创建移动轨迹 -------// UIBezierPath *movePath = [UIBezierPath bezierPath]; [movePath moveToPoint:startPoint]; [movePath addQuadCurveToPoint:endPoint controlPoint:CGPointMake(200,100)]; // 轨迹动画 CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; CGFloat durationTime = 1; // 动画时间1秒 pathAnimation.duration = durationTime; pathAnimation.removedOnCompletion = NO; pathAnimation.fillMode = kCAFillModeForwards; pathAnimation.path = movePath.CGPath; //------- 创建缩小动画 -------// CABasicAnimation *scaleAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; scaleAnimation.fromValue = https://www.it610.com/article/[NSNumber numberWithFloat:1.0]; scaleAnimation.toValue = [NSNumber numberWithFloat:0.3]; scaleAnimation.duration = 1.0; scaleAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; scaleAnimation.removedOnCompletion = NO; scaleAnimation.fillMode = kCAFillModeForwards; // 添加轨迹动画 [goodsImage.layer addAnimation:pathAnimation forKey:nil]; // 添加缩小动画 [goodsImage.layer addAnimation:scaleAnimation forKey:nil]; //------- 动画结束后执行 -------// dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(durationTime * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ //[animationLayer removeFromSuperlayer]; [goodsImage removeFromSuperview]; completion(YES); }); }----爱恨的潮汐

    推荐阅读