ios loading视图动画(模仿58同城)
最近看了58同城的加载视图,感觉很不错,如下图:
所以想模仿写一个,下载58同城的app,解压,发现它用的是图片来实现的动画效果,
并不是绘制出来的,所以这就相对简单些了,其实整个动画的逻辑不复杂,无非是几个动画的组合,然后切换图片,注意细节处,比如下面的阴影部分也是个动画,
上面的图形下来,阴影变大,上去,阴影变小;
下面直接贴代码:
上面图形的动画
- -(void) loadingAnimation:(float)fromValue toValue:(float)toValue timingFunction:(NSString * const)tf
- {
- //位置
- CABasicAnimation *panimation = [CABasicAnimation animation];
- panimation.keyPath = @"position.y";
- panimation.fromValue =@(fromValue);
- panimation.toValue = @(toValue);
- panimation.duration = ANIMATION_DURATION_SECS;
- panimation.timingFunction = [CAMediaTimingFunction functionWithName:tf];
- //旋转
- CABasicAnimation *ranimation = [CABasicAnimation animation];
- ranimation.keyPath = @"transform.rotation";
- ranimation.fromValue =@(0);
- ranimation.toValue = @(M_PI_2);
- ranimation.duration = ANIMATION_DURATION_SECS;
- ranimation.timingFunction = [CAMediaTimingFunction functionWithName:tf];
- //组合
- CAAnimationGroup *group = [[CAAnimationGroup alloc] init];
- group.animations = @[ panimation,ranimation];
- group.duration = ANIMATION_DURATION_SECS;
- group.beginTime = 0;
- group.fillMode=kCAFillModeForwards;
- group.removedOnCompletion = NO;
- [_shapView.layer addAnimation:group forKey:@"basic"];
- }
下面是阴影动画
- -(void) scaleAnimation:(float) fromeValue toValue:(float)toValue timingFunction:(NSString * const)tf
- {
- //缩放
- CABasicAnimation *sanimation = [CABasicAnimation animation];
- sanimation.keyPath = @"transform.scale";
- sanimation.fromValue =@(fromeValue);
- sanimation.toValue = @(toValue);
- sanimation.duration = ANIMATION_DURATION_SECS;
- sanimation.fillMode = kCAFillModeForwards;
- sanimation.timingFunction = [CAMediaTimingFunction functionWithName:tf];
- sanimation.removedOnCompletion = NO;
- [_shadowView.layer addAnimation:sanimation forKey:@"shadow"];
- }
然后我是开了个定时器去刷新动画,当然也有其他方法
- -(void)animateNextStep
- {
- switch (_stepNumber)
- {
- case 0:
- {
- _shapView.image=[UIImage imageNamed:@"loading_circle"];
- [self loadingAnimation:_fromValue toValue:_toValue timingFunction:kCAMediaTimingFunctionEaseIn];
- [self scaleAnimation:_scalefromValue toValue:_scaletoValue timingFunction:kCAMediaTimingFunctionEaseIn];
- }
- break;
- case 1:
- {
- _shapView.image=[UIImage imageNamed:@"loading_square"];
- [self loadingAnimation:_toValue toValue:_fromValue timingFunction:kCAMediaTimingFunctionEaseOut];
- [self scaleAnimation:_scaletoValue toValue:_scalefromValue timingFunction:kCAMediaTimingFunctionEaseIn];
- }
- break;
- case 2:
- {
- _shapView.image=[UIImage imageNamed:@"loading_square"];
- [self loadingAnimation:_fromValue toValue:_toValue timingFunction:kCAMediaTimingFunctionEaseIn];
- [self scaleAnimation:_scalefromValue toValue:_scaletoValue timingFunction:kCAMediaTimingFunctionEaseIn];
- }
- break;
- case 3:
- {
- _shapView.image=[UIImage imageNamed:@"loading_triangle"];
- [self loadingAnimation:_toValue toValue:_fromValue timingFunction:kCAMediaTimingFunctionEaseOut];
- [self scaleAnimation:_scaletoValue toValue:_scalefromValue timingFunction:kCAMediaTimingFunctionEaseIn];
- }
- break;
- case 4:
- {
- _shapView.image=[UIImage imageNamed:@"loading_triangle"];
- [self loadingAnimation:_fromValue toValue:_toValue timingFunction:kCAMediaTimingFunctionEaseIn];
- [self scaleAnimation:_scalefromValue toValue:_scaletoValue timingFunction:kCAMediaTimingFunctionEaseIn];
- }
- break;
- case 5:
- {
- _shapView.image=[UIImage imageNamed:@"loading_circle"];
- [self loadingAnimation:_toValue toValue:_fromValue timingFunction:kCAMediaTimingFunctionEaseOut];
- [self scaleAnimation:_scaletoValue toValue:_scalefromValue timingFunction:kCAMediaTimingFunctionEaseIn];
- _stepNumber = -1;
- }
- break;
- default:
- break;
- }
- _stepNumber++;
- }
就这么简单,效果如下:
~~~~~~~~~~~~~~~~~~~~~~~
工程下载地址: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同城)的更多相关文章
- 【微信小程序】模仿58同城页面制作以及动态数据加载
完成动态数据的加载,如下 使用上班的空余时间慢慢的学习,相信总有一天我会很熟悉的掌握这门技术. 本次学习小总结: 微信小程序使用的代码基本与HTML.CSS.JS等前段有关知识一样. 微信小程序js使 ...
- 58 同城 iOS 客户端 iOS11 及 iPhone X 适配实践
一.前言 前段时间 WWDC 大会上苹果推出了 iOS11 系统 和 iPhone X 新机型,相信各个 iOS 团队的开发者都已经在计划新系统和新机型的适配工作了.不得不说,新系统和新机型的发布确实 ...
- 仿58同城UITableViewCell动画
之前看58同城APP有一个页面中Cell依次从右向左移动,今天试着做了下. 在做的过程中也遇到了几个小的问题,也算是注意点吧. 1.Cell出现时每个Cell的动画时间一样,导致没有依次移动的效果. ...
- [MISSAJJ原创] UITableViewCell移动及翻转出现的3D动画效果[58同城cell移动效果]
2015-11-20 很喜欢在安静的状态, 听着音乐,敲着键盘, 和代码们浓情对话, 每一份代码的积累, 都让自己觉得很充实快乐!Y(^_^)Y. 看到58同城app的cell有动画移动出现的特效,很 ...
- IOS中的动画菜单
SvpplyTable(可折叠可张开的菜单动画) 允许你简单地创建可折叠可张开的菜单动画效果,灵感来自于Svpply app.不同表格项目使用JSON定义,你可以定义每个菜单项和任何子菜单,为每个项目 ...
- iOS精美过度动画、视频会议、朋友圈、联系人检索、自定义聊天界面等源码
iOS精选源码 iOS 精美过度动画源码 iOS简易聊天页面以及容联云IM自定义聊天页面的实现思路 自定义cell的列表视图实现:置顶.拖拽.多选.删除 SSSearcher仿微信搜索联系人,高亮搜索 ...
- 58同城高性能移动Push推送平台架构演进之路
本文详细讲述58同城高性能移动Push推送平台架构演进的三个阶段,并介绍了什么是移动Push推送,为什么需要,原理和方案对比:移动Push推送第一阶段(单平台)架构如何设计:移动Push推送典型性能问 ...
- iOS关于CoreAnimation动画知识总结
一:UIKit动画 在介绍CoreAnimation动画前先简单介绍一下UIKit动画,大部分简单的动画都可以使用UIKit动画实现,如果想实现更复杂的效果,则需要使用Core Animation了: ...
- 转 iOS Core Animation 动画 入门学习(一)基础
iOS Core Animation 动画 入门学习(一)基础 reference:https://developer.apple.com/library/ios/documentation/Coco ...
随机推荐
- DOM_节点层次
一.DOM1级定义了一个Node接口,这个接口是由DOM中的所有节点类型实现的.Node接口共有12种节点类型,常见的是元素节点.文本节点和文档节点. Node.ELEMENT_NODE(1);——元 ...
- 使用FTP删不掉文件的解决方法
今天在清理自己的服务器的时候发现曾经上传了一些png文件,中文命名的,权限是718,如果权限为777就可以删掉但是很奇怪的是执行权限修改也不行,改不掉: 最后的解决方法就是使用windows 随便打开 ...
- KnockoutJS(3)-绑定语法
绑定语法大致分为2种: 1. 数据绑定(data-bind syntax) 2. 绑定上下文(Binding Context) 下面针对这2中绑定语法分别介绍一下 1. 绑定上下文(Binding C ...
- C 语言循环之break、continue
在C 编程的过程中,我们很多时候都会用到循环,但有时需要中途跳出整个循环,或跳过某一次循环,这时就需要用到break或continue,关于二者的使用很多书籍和博文都有很相近的说明,此处不做任何讲解, ...
- opener 属性是一个可读可写的属性,可返回对创建该窗口的 Window 对象的引用
opener 属性是一个可读可写的属性,可返回对创建该窗口的 Window 对象的引用
- Linux 服务器如何禁止 ping 以及开启 ping
Linux 默认是允许 ping 响应的,也就是说 ping 是开启的,但 ping 有可能是网络攻击的开始之处,所以关闭 ping 可以提高服务器的安全系数.系统是否允许 ping 由2个因素决定的 ...
- Android图像处理2
此次实验主要通过Android中的方法获取输入的颜色矩阵的值,更改后赋值给图片中的颜色矩阵更改图片效果.具体的布局的方法跟笔记1种差不多,只不过这里要添加一个供用户输入的GridView <Gr ...
- jQuery基础与实例
一.简介 1.什么是jQuery jQuery是一个轻量级.快速简洁的javaScript库,能让我们方便快捷的选择元素操作元素属性. 2.下载地址 3.jQuery使用方式 $("div& ...
- 面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
基础篇:操作系统.计算机网络.设计模式 一:操作系统 1. 进程的有哪几种状态,状态转换图,及导致转换的事件. 2. 进程与线程的区别. 3. 进程通信的几种方式. 4. 线程同步几种方式.(一定要会 ...
- 【C++】GacLib——ListView.ViewSwitching
http://www.gaclib.net/Demos/Controls.ListView.ViewSwitching/Demo.html#FILESYSTEMINFORMATION_H