最近看了58同城的加载视图,感觉很不错,如下图:

所以想模仿写一个,下载58同城的app,解压,发现它用的是图片来实现的动画效果,
并不是绘制出来的,所以这就相对简单些了,其实整个动画的逻辑不复杂,无非是几个动画的组合,然后切换图片,注意细节处,比如下面的阴影部分也是个动画,
上面的图形下来,阴影变大,上去,阴影变小;

下面直接贴代码:

上面图形的动画

  1. -(void) loadingAnimation:(float)fromValue toValue:(float)toValue timingFunction:(NSString * const)tf
  2. {
  3. //位置
  4. CABasicAnimation *panimation = [CABasicAnimation animation];
  5. panimation.keyPath = @"position.y";
  6. panimation.fromValue =@(fromValue);
  7. panimation.toValue = @(toValue);
  8. panimation.duration = ANIMATION_DURATION_SECS;
  9. panimation.timingFunction = [CAMediaTimingFunction functionWithName:tf];
  10. //旋转
  11. CABasicAnimation *ranimation = [CABasicAnimation animation];
  12. ranimation.keyPath = @"transform.rotation";
  13. ranimation.fromValue =@(0);
  14. ranimation.toValue = @(M_PI_2);
  15. ranimation.duration = ANIMATION_DURATION_SECS;
  16. ranimation.timingFunction = [CAMediaTimingFunction functionWithName:tf];
  17. //组合
  18. CAAnimationGroup *group = [[CAAnimationGroup alloc] init];
  19. group.animations = @[ panimation,ranimation];
  20. group.duration = ANIMATION_DURATION_SECS;
  21. group.beginTime = 0;
  22. group.fillMode=kCAFillModeForwards;
  23. group.removedOnCompletion = NO;
  24. [_shapView.layer addAnimation:group forKey:@"basic"];
  25. }

下面是阴影动画

  1. -(void) scaleAnimation:(float) fromeValue toValue:(float)toValue timingFunction:(NSString * const)tf
  2. {
  3. //缩放
  4. CABasicAnimation *sanimation = [CABasicAnimation animation];
  5. sanimation.keyPath = @"transform.scale";
  6. sanimation.fromValue =@(fromeValue);
  7. sanimation.toValue = @(toValue);
  8. sanimation.duration = ANIMATION_DURATION_SECS;
  9. sanimation.fillMode = kCAFillModeForwards;
  10. sanimation.timingFunction = [CAMediaTimingFunction functionWithName:tf];
  11. sanimation.removedOnCompletion = NO;
  12. [_shadowView.layer addAnimation:sanimation forKey:@"shadow"];
  13. }

然后我是开了个定时器去刷新动画,当然也有其他方法

  1. -(void)animateNextStep
  2. {
  3. switch (_stepNumber)
  4. {
  5. case 0:
  6. {
  7. _shapView.image=[UIImage imageNamed:@"loading_circle"];
  8. [self loadingAnimation:_fromValue toValue:_toValue timingFunction:kCAMediaTimingFunctionEaseIn];
  9. [self scaleAnimation:_scalefromValue toValue:_scaletoValue timingFunction:kCAMediaTimingFunctionEaseIn];
  10. }
  11. break;
  12. case 1:
  13. {
  14. _shapView.image=[UIImage imageNamed:@"loading_square"];
  15. [self loadingAnimation:_toValue toValue:_fromValue timingFunction:kCAMediaTimingFunctionEaseOut];
  16. [self scaleAnimation:_scaletoValue toValue:_scalefromValue timingFunction:kCAMediaTimingFunctionEaseIn];
  17. }
  18. break;
  19. case 2:
  20. {
  21. _shapView.image=[UIImage imageNamed:@"loading_square"];
  22. [self loadingAnimation:_fromValue toValue:_toValue timingFunction:kCAMediaTimingFunctionEaseIn];
  23. [self scaleAnimation:_scalefromValue toValue:_scaletoValue timingFunction:kCAMediaTimingFunctionEaseIn];
  24. }
  25. break;
  26. case 3:
  27. {
  28. _shapView.image=[UIImage imageNamed:@"loading_triangle"];
  29. [self loadingAnimation:_toValue toValue:_fromValue timingFunction:kCAMediaTimingFunctionEaseOut];
  30. [self scaleAnimation:_scaletoValue toValue:_scalefromValue timingFunction:kCAMediaTimingFunctionEaseIn];
  31. }
  32. break;
  33. case 4:
  34. {
  35. _shapView.image=[UIImage imageNamed:@"loading_triangle"];
  36. [self loadingAnimation:_fromValue toValue:_toValue timingFunction:kCAMediaTimingFunctionEaseIn];
  37. [self scaleAnimation:_scalefromValue toValue:_scaletoValue timingFunction:kCAMediaTimingFunctionEaseIn];
  38. }
  39. break;
  40. case 5:
  41. {
  42. _shapView.image=[UIImage imageNamed:@"loading_circle"];
  43. [self loadingAnimation:_toValue toValue:_fromValue timingFunction:kCAMediaTimingFunctionEaseOut];
  44. [self scaleAnimation:_scaletoValue toValue:_scalefromValue timingFunction:kCAMediaTimingFunctionEaseIn];
  45. _stepNumber = -1;
  46. }
  47. break;
  48. default:
  49. break;
  50. }
  51. _stepNumber++;
  52. }

就这么简单,效果如下:

~~~~~~~~~~~~~~~~~~~~~~~

工程下载地址:http://code4app.com/ios/%E6%A8%A1%E4%BB%BF58%E5%90%8C%E5%9F%8Eloading%E8%A7%86%E5%9B%BE/56ac4bc8b5ad2e9d7d8b4b9a

ios loading视图动画(模仿58同城)的更多相关文章

  1. 【微信小程序】模仿58同城页面制作以及动态数据加载

    完成动态数据的加载,如下 使用上班的空余时间慢慢的学习,相信总有一天我会很熟悉的掌握这门技术. 本次学习小总结: 微信小程序使用的代码基本与HTML.CSS.JS等前段有关知识一样. 微信小程序js使 ...

  2. 58 同城 iOS 客户端 iOS11 及 iPhone X 适配实践

    一.前言 前段时间 WWDC 大会上苹果推出了 iOS11 系统 和 iPhone X 新机型,相信各个 iOS 团队的开发者都已经在计划新系统和新机型的适配工作了.不得不说,新系统和新机型的发布确实 ...

  3. 仿58同城UITableViewCell动画

    之前看58同城APP有一个页面中Cell依次从右向左移动,今天试着做了下. 在做的过程中也遇到了几个小的问题,也算是注意点吧. 1.Cell出现时每个Cell的动画时间一样,导致没有依次移动的效果. ...

  4. [MISSAJJ原创] UITableViewCell移动及翻转出现的3D动画效果[58同城cell移动效果]

    2015-11-20 很喜欢在安静的状态, 听着音乐,敲着键盘, 和代码们浓情对话, 每一份代码的积累, 都让自己觉得很充实快乐!Y(^_^)Y. 看到58同城app的cell有动画移动出现的特效,很 ...

  5. IOS中的动画菜单

    SvpplyTable(可折叠可张开的菜单动画) 允许你简单地创建可折叠可张开的菜单动画效果,灵感来自于Svpply app.不同表格项目使用JSON定义,你可以定义每个菜单项和任何子菜单,为每个项目 ...

  6. iOS精美过度动画、视频会议、朋友圈、联系人检索、自定义聊天界面等源码

    iOS精选源码 iOS 精美过度动画源码 iOS简易聊天页面以及容联云IM自定义聊天页面的实现思路 自定义cell的列表视图实现:置顶.拖拽.多选.删除 SSSearcher仿微信搜索联系人,高亮搜索 ...

  7. 58同城高性能移动Push推送平台架构演进之路

    本文详细讲述58同城高性能移动Push推送平台架构演进的三个阶段,并介绍了什么是移动Push推送,为什么需要,原理和方案对比:移动Push推送第一阶段(单平台)架构如何设计:移动Push推送典型性能问 ...

  8. iOS关于CoreAnimation动画知识总结

    一:UIKit动画 在介绍CoreAnimation动画前先简单介绍一下UIKit动画,大部分简单的动画都可以使用UIKit动画实现,如果想实现更复杂的效果,则需要使用Core Animation了: ...

  9. 转 iOS Core Animation 动画 入门学习(一)基础

    iOS Core Animation 动画 入门学习(一)基础 reference:https://developer.apple.com/library/ios/documentation/Coco ...

随机推荐

  1. C++函数模板本质-学习入门

    template<typename T> void mySwap(T &a, T &b) { T c; c = a; a = b; b = c; } int main() ...

  2. 【转载】绝对干货!Linux小白最佳实践:《超容易的Linux系统管理入门书》(连载九)如何通过源代码安装软件

    除了使用Linux的包管理机制进行软件的安装.更新和卸载,从源代码进行软件的安装也是非常常见的,开源软件提供了源代码包,开发者可以方便的通过源代码进行安装.从源码安装软件一般经过软件配置.编译软件.执 ...

  3. DEDECMS中,channelartlist标签

    当前频道的下级栏目的内容列表 dede:channelartlist 标签: {dede:channelartlist row=6} <dl> <dt><a href=' ...

  4. 【转】M0,M1,M2,M3,M4基本概念

    在金融学中的M1,M2,M3,M4都是货币层次的划分M0= 流通中的现金;M1=M0+ 个人信用卡循环信用额度+ 银行借记卡活期存款+ 银行承兑汇票余额+ 企业可开列支票活期存款;M2=M1+ 个人非 ...

  5. PHP、Java、C#实现URI参数签名算法,确保应用与REST服务器之间的安全通信,防止Secret Key盗用、数据篡改等恶意攻击行为

    简介 应用基于HTTP POST或HTTP GET请求发送Open API调用请求时,为了确保应用与REST服务器之间的安全通信,防止Secret Key盗用.数据篡改等恶意攻击行为,REST服务器使 ...

  6. MySql 服务端与客户端下载地址

    mysql官网的注册,要上传户口,才能下载. 在网上搜了个下载地址. mysql-5.6.8-rc http://mysql.stu.edu.tw/Downloads/MySQL-5.6/mysql- ...

  7. C# 学习之旅(2)--- 意外的收获

    今天在完成老师布置的C#作业(计算一元二次方程的根)的时候,收获到意外的知识,所以写此博文予以记录. 意外收获为: 对文本框的输入值进行检测,使之按照要求格式输入. 下面是整个的源代码: using ...

  8. 考研路之C语言

    今天在学习C的时候,又学到了一些新的内容,所以赶紧记录下来. case 1: #include <stdio.h> union exa{ struct{ int a; int b; }ou ...

  9. Linux学习系列之Linux入门(三)gcc学习

    GCC(GNU Compiler Collection,GNU编译器套装),是一套由GNU开发的编程语言编译器.它是一套以GPL及LGPL许可证所发布的自由软件,也是GNU计划的关键部分,亦是自由的类 ...

  10. Python+PyQt 数据库基本操作

    Sqlite: 使用Python的sqlite3: 需要注意下commit方式与qt稍有不同 import sqlite3 class DBManager(): def __init__(self): ...