iOS添加购物车动画效果示例

发布时间 - 2026-01-10 23:17:52    点击率:

一、计算动画开始结束点位置

方法:

- (CGPoint)convertPoint:(CGPoint)point toView:(nullable UIView *)view;

1) 动画开始位置fromCenter

复制代码 代码如下:
CGPoint fromCenter =  [animationView convertPoint:CGPointMake(animationView.frame.size.width * 0.5f, animationView.frame.size.height * 0.5f) toView:keyWindow];

2)动画结束位置endCenter

复制代码 代码如下:
CGPoint endCenter = [endView convertPoint:CGPointMake(endView.frame.size.width * 0.5f, endView.frame.size.height * 0.5f) toView:keyWindow];

二、计算贝塞尔曲线(抛物线)的两个控制点

  • controlPoint1是控制点1
  • controlPoint2是控制点2
  • A是controlPoint1和controlPoint2的中点
  • controlPointC是fromCenter和B的中点

1)先设置控制点距最高点(fromCenter或endCenter)的水平距离controlPointEY,本篇默认controlPointEY = 100,即图1中点controlPointC到点A的距离。

2)计算控制点相对于点A的距离controlPointEX,即controlPoint1到A距离或controlPoint2到A距离,本篇设置为fromCenter.x到endCenter.x的1/4,即controlPointEX = (endCenter.x - fromCenter.x) * 0.25f;

3)计算两个控制点

CGPoint controlPoint1 = CGPointMake(controlPointCX - controlPointEX, controlPointCY - controlPointEY);
CGPoint controlPoint2 = CGPointMake(controlPointCX + controlPointEX, controlPointCY - controlPointEY);

三、复制动画的layer

NSString *str = ((UIButton *)animationView).titleLabel.text;
_animationLayer = [CATextLayer layer];
_animationLayer.bounds = animationView.bounds;
_animationLayer.position = fromCenter;
_animationLayer.alignmentMode = kCAAlignmentCenter;//文字对齐方式
_animationLayer.wrapped = YES;
_animationLayer.contentsScale = [UIScreen mainScreen].scale;
_animationLayer.string = str;
_animationLayer.backgroundColor = [UIColor redColor].CGColor;
[keyWindow.layer addSublayer:_animationLayer];

四、动画组合

1)运动轨迹(抛物线)

UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:fromCenter];
[path addCurveToPoint:endCenter controlPoint1:controlPoint1 controlPoint2:controlPoint2];
CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
pathAnimation.path = path.CGPath;

2)旋转起来

CABasicAnimation *rotateAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
rotateAnimation.removedOnCompletion = YES;
rotateAnimation.fromValue = [NSNumber numberWithFloat:0];
rotateAnimation.toValue = [NSNumber numberWithFloat:10 * M_PI];
rotateAnimation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]

3)缩放动画

CABasicAnimation *scaleAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
scaleAnimation.removedOnCompletion = NO;
scaleAnimation.fromValue = [NSNumber numberWithFloat:1.0];
scaleAnimation.toValue = [NSNumber numberWithFloat:0.2];

4)透明度动画

CABasicAnimation *alphaAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
alphaAnimation.removedOnCompletion = NO;
alphaAnimation.fromValue = [NSNumber numberWithFloat:1.0];
alphaAnimation.toValue = [NSNumber numberWithFloat:0.1];

5)动画组合

CAAnimationGroup *groups = [CAAnimationGroup animation];
groups.animations = @[pathAnimation,rotateAnimation, scaleAnimation, alphaAnimation];
groups.duration = kShoppingCartDuration;
groups.removedOnCompletion=NO;
groups.fillMode=kCAFillModeForwards;
groups.delegate = self;
[_animationLayer addAnimation:groups forKey:@"group"];

动画效果:

下载地址:ShoppingCartAnimation_jb51.rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# ios购物车动画效果  # ios  # 添加购物车动画  # ios加入购物车动画  # iOS实现自定义购物车角标显示购物数量(添加商品时角标抖动 Vie)  # IOS购物车界面实现效果示例  # iOS实现电商购物车界面示例  # iOS搭建简易购物车页面  # 下载地址  # 相对于  # 设置为  # 大家多多  # 塞尔  # 点距  # endView  # controlPointEX  # controlPointEY  # li  # ul  # controlPointC  # CATextLayer  # _animationLayer  # text  # alignmentMode  # position  # bounds  # titleLabel  # layer 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  如何在万网自助建站平台快速创建网站?  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  在线教育网站制作平台,山西立德教育官网?  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  如何用花生壳三步快速搭建专属网站?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  nodejs redis 发布订阅机制封装实现方法及实例代码  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  如何快速配置高效服务器建站软件?  如何快速搭建高效WAP手机网站?  Android利用动画实现背景逐渐变暗  Laravel如何优化应用性能?(缓存和优化命令)  如何基于云服务器快速搭建网站及云盘系统?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  如何在IIS中新建站点并配置端口与IP地址?  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  如何用PHP快速搭建CMS系统?  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  Laravel如何使用withoutEvents方法临时禁用模型事件  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  手机网站制作与建设方案,手机网站如何建设?  装修招标网站设计制作流程,装修招标流程?  ,网页ppt怎么弄成自己的ppt?  做企业网站制作流程,企业网站制作基本流程有哪些?  怎样使用JSON进行数据交换_它有什么限制  如何用IIS7快速搭建并优化网站站点?  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives  如何在七牛云存储上搭建网站并设置自定义域名?  网站制作免费,什么网站能看正片电影?  如何在Windows服务器上快速搭建网站?  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  Swift中swift中的switch 语句  青岛网站建设如何选择本地服务器?  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  如何快速使用云服务器搭建个人网站?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  JavaScript如何实现倒计时_时间函数如何精确控制  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  魔毅自助建站系统:模板定制与SEO优化一键生成指南  Linux系统命令中screen命令详解  js实现获取鼠标当前的位置