iOS开发中仿Tumblr点赞心破碎动画效果

发布时间 - 2026-01-11 00:38:55    点击率:

 最近Tumblr轻博客无论是web端还是移动端,都非常受欢迎,简单调研了一下,其中动画是我感兴趣的,特此写了个仿Tumblr点赞心破碎动画;

1.首先看下效果:

2.模仿Tumblr中的效果应用如下:

原理:使用按钮点击Action增加两个事件,通过改变背景hidden和frame,切换图片,增加动画效果等;

setupUI及touch Action:

<span style="font-size:14px;">- (void)setupUI 
{ 
  // 点击的btn 
  UIButton *praiseBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 
  praiseBtn.frame = CGRectMake(100, 200, KKPraiseBtnWH, KKPraiseBtnWH); 
  [praiseBtn setImage:[UIImage imageNamed:@"icon_like"] forState:UIControlStateNormal]; 
  [praiseBtn setImage:[UIImage imageNamed:@"icon_likeon"] forState:UIControlStateSelected]; 
  [self.view addSubview:praiseBtn]; 
  [praiseBtn addTarget:self action:@selector(clickTheBtn:) forControlEvents:UIControlEventTouchUpInside]; 
  _praiseBtn = praiseBtn; 
  // 放大后的btn 
  _coverBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 
  _coverBtn.frame = praiseBtn.frame; 
  _coverBtn.alpha = 0; 
  [_coverBtn setImage:[UIImage imageNamed:@"big"] forState:UIControlStateSelected]; 
  [_coverBtn setImage:[UIImage imageNamed:@"big"] forState:UIControlStateNormal]; 
  [self.view insertSubview:_coverBtn belowSubview:praiseBtn]; 
  _cancelPraiseImg = [[UIImageView alloc]initWithFrame:CGRectMake(80, 150, KKPraiseBtnWH*2, KKPraiseBtnWH*2*KKToBrokenHeartWH)]; 
  _cancelPraiseImg.hidden = YES; 
  _cancelPraiseImg.centerX = _praiseBtn.centerX; 
  [self.view addSubview:_cancelPraiseImg]; 
} 
-(void)clickTheBtn:(UIButton *)btn 
{ 
  [self playAnimation]; 
  btn.userInteractionEnabled = NO; 
  btn.selected = !btn.selected; 
} 
-(void)playAnimation{ 
  if (!_praiseBtn.selected) { 
    _coverBtn.alpha = 1; 
    [UIView animateWithDuration:1.0f animations:^{ 
      _coverBtn.frame = CGRectMake(80, 100, KKPraiseBtnWH*2, KKPraiseBtnWH*2); 
      CAKeyframeAnimation *anima = [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation"]; 
      NSValue *value1 = [NSNumber numberWithFloat:-M_PI/180*5]; 
      NSValue *value2 = [NSNumber numberWithFloat:M_PI/180*5]; 
      NSValue *value3 = [NSNumber numberWithFloat:-M_PI/180*5]; 
      anima.values = @[value1,value2,value3]; 
      anima.repeatCount = MAXFLOAT; 
      [_coverBtn.layer addAnimation:anima forKey:nil]; 
      _coverBtn.alpha = 0; 
      _coverBtn.centerX = _praiseBtn.centerX; 
    } completion:^(BOOL finished) { 
      _coverBtn.frame = _praiseBtn.frame; 
      _praiseBtn.userInteractionEnabled = YES; 
    }]; 
  } else { 
    _cancelPraiseImg.hidden = NO; 
    NSArray *imgArr = [NSArray arrayWithObjects:[UIImage imageNamed:@"icon_like_broken1"],[UIImage imageNamed:@"icon_like_broken2"],[UIImage imageNamed:@"icon_like_broken3"],[UIImage imageNamed:@"icon_like_broken4"], nil nil]; 
    _cancelPraiseImg.animationImages = imgArr; 
    _cancelPraiseImg.animationDuration = KKBorkenTime; 
    _cancelPraiseImg.animationRepeatCount = 1; 
    [_cancelPraiseImg startAnimating]; 
    [UIView animateWithDuration:KKBorkenTime animations:^{ 
      _cancelPraiseImg.frame = CGRectMake(80, 200, KKPraiseBtnWH*2, KKPraiseBtnWH*2*KKToBrokenHeartWH); 
      _cancelPraiseImg.alpha = 0; 
    }completion:^(BOOL finished) { 
      _cancelPraiseImg.frame = CGRectMake(80, 150, KKPraiseBtnWH*2, KKPraiseBtnWH*2*KKToBrokenHeartWH); 
      _cancelPraiseImg.alpha = 1; 
      _praiseBtn.userInteractionEnabled = YES; 
    }]; 
  } 
}</span> 

以上所述是小编给大家介绍的iOS开发中仿Tumblr点赞心破碎动画效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# ios点赞动画效果  # ios仿tumblr点赞  # 仿tumblr心破碎  # iOS实现抖音点赞动画效果  # iOS实现点赞动画特效  # iOS使用核心动画和粒子发射器实现点赞按钮的方法  # 基于UIControl控件实现ios点赞功能  # mysql之脏读、不可重复读、幻读的区别及说明  # 小编  # 在此  # 感兴趣  # 给大家  # 写了  # 受欢迎  # 所述  # 给我留言  # 感谢大家  # 疑问请  # 有任何  # 大后  # 博客  # setImage  # KKPraiseBtnWH  # icon_like  # imageNamed  # UIImage  # praiseBtn  # UIButton 


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


相关推荐: laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  香港服务器WordPress建站指南:SEO优化与高效部署策略  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  零基础网站服务器架设实战:轻量应用与域名解析配置指南  如何快速选择适合个人网站的云服务器配置?  Python文本处理实践_日志清洗解析【指导】  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  大连 网站制作,大连天途有线官网?  微信小程序 input输入框控件详解及实例(多种示例)  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  如何用AWS免费套餐快速搭建高效网站?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  浅谈Javascript中的Label语句  北京网站制作的公司有哪些,北京白云观官方网站?  详解jQuery中基本的动画方法  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  微信小程序 wx.uploadFile无法上传解决办法  如何快速搭建虚拟主机网站?新手必看指南  进行网站优化必须要坚持的四大原则  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  javascript中对象的定义、使用以及对象和原型链操作小结  如何获取PHP WAP自助建站系统源码?  教你用AI润色文章,让你的文字表达更专业  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  香港服务器网站推广:SEO优化与外贸独立站搭建策略  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  动图在线制作网站有哪些,滑动动图图集怎么做?  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  简历在线制作网站免费版,如何创建个人简历?  Laravel怎么使用artisan命令缓存配置和视图  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  如何用y主机助手快速搭建网站?  Laravel如何实现文件上传和存储?(本地与S3配置)  浅析上传头像示例及其注意事项  Laravel中的withCount方法怎么高效统计关联模型数量  如何快速登录WAP自助建站平台?  phpredis提高消息队列的实时性方法(推荐)  Laravel如何处理文件下载请求?(Response示例)  打造顶配客厅影院,这份100寸电视推荐名单请查收