欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > 实现一个iOS晃动动画

实现一个iOS晃动动画

2025/4/18 13:57:23 来源:https://blog.csdn.net/LIUXIAOXIAOBO/article/details/144794116  浏览:    关键词:实现一个iOS晃动动画

有时候在开发中, 需要我们实现一个晃动动画,
达到一个提示的效果,如下图所示
请添加图片描述

思路, 我们要实现的本质上是一个旋转动画,然后
设置一个旋转角度,以底部中间为中心旋转,
左右各有一个旋转的角度,并且旋转角度逐渐变小,
动画速度逐渐变快,即时间间隔逐渐减小

代码


#define radian(angle) ((angle) / 180.0 * M_PI)
- (void)setUpUI
{[self configCorners:UIRectCornerTopLeft | UIRectCornerTopRight | UIRectCornerBottomRight radius:6.5];self.layer.backgroundColor = [UIColor redColor].CGColor;self.textColor = [UIColor whiteColor];self.font = [UIFont systemFontOfSize:9];self.textAlignment = NSTextAlignmentCenter;self.layer.anchorPoint = CGPointMake(0.5, 1);self.layer.masksToBounds = YES;CGFloat width = [UIScreen mainScreen].bounds.size.width;CGFloat height = [UIScreen mainScreen].bounds.size.height;self.layer.position = CGPointMake(width / 2.f - 15, height/2.f + 5);[self addMoveAnimation:self];}- (void)addMoveAnimation:(UIView *)view
{CAKeyframeAnimation *animation = [CAKeyframeAnimation animation];animation.delegate = self;animation.keyPath = @"transform.rotation";animation.values = @[@(radian(0)), @(radian(-25)), @(radian(0)), @(radian(25)),@(radian(0)),@(radian(-20)), @(radian(0)), @(radian(20)),@(radian(0)),@(radian(-10)), @(radian(0)), @(radian(10)),@(radian(0)),@(radian(-5)), @(radian(0)), @(radian(5)),@(radian(0)),];animation.keyTimes = @[@0, @0.15, @0.3 , @0.45, @0.6, @0.7,@0.74, @0.78, @0.82, @0.86, @0.89, @0.92, @0.94, @0.96, @0.98,@0.99, @1];animation.duration = 1.2;// 动画的重复执行次数animation. repeatCount = 1;// 保持动画执行完毕后的状态animation.removedOnCompletion = YES;animation.fillMode = kCAFillModeRemoved;[view.layer addAnimation:animation forKey:@"shake_animation"];
}#pragma mark - 动画代理- (void)animationDidStop: (CAAnimation *)animation finished:(BOOL)flag
{dispatshafter_ 2, NSOperationQueuePriorityHigh, ^{[self addMoveAnimation:self];});
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词