【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);
});
}----爱恨的潮汐
推荐阅读
- 宽容谁
- 我要做大厨
- 增长黑客的海盗法则
- 画画吗()
- 2019-02-13——今天谈梦想()
- 远去的风筝
- 三十年后的广场舞大爷
- 叙述作文
- 20190302|20190302 复盘翻盘
- 学无止境,人生还很长