近期工作不忙,来一个需求感觉棒棒的,是一个比较简单的页面,如下图(图1)

图1

应该很简单吧,没什么大的功能,就是一个展示,一个拨打电话,拨打电话不需要说,几行代码搞定,基本UI也不用说了,刚培训完的孩子们都能做,但是如果让这个页面动起来呢,会不会很漂亮呢(方然,这不是屁话么,先看看我做的效果吧,图2)

123.gif

正题

会动得有云彩在飘,对号的缩放,添加绿色线条,我们一个一个的看

云彩的飘动

要做到这个会飘动的云彩,其实很简单,他是一个平移动画,我画了一个简单的图,可以看一下,便于理解嘛

456.gif

只要云彩有透明部分,就可以了,但是当云彩向右移动的时候,屏幕上会有一快没有云彩试图覆盖的区域,尤其是当X等于屏幕的宽的时候

Paste_Image.png

思路:
其实解决这个问题也是很简单的,我用两个imageView,imageView2的初始X值只要为负的屏幕宽,当imageView1移动的时候,让imageView2也跟着一起移动,他们两个以同样的速度来移动就可以了,等到imageView1的x等于屏幕的宽的时候,把imageView1的x值变成0然后继续执行这个动画,同时,当imageView2的X等于屏幕的宽的时候,把它的X变成初始的坐标

789.gif

这样就可以了吧,代码如下:

+ (void)translationAnimationView:(UIView *)view animationDuration:(NSTimeInterval)timer animationBlock:(QuitRentAnimationBlock)block
{
[UIView animateWithDuration:timer animations:^{
view.x = view.x + SCREEN_WIDTH;
} completion:^(BOOL finished) {
if (finished) {
block();
}
}];
}

然后两个imageview分别调用,在完成的block里面继续调用自己

//给云彩1做平移动画
- (void)cloudImageView_1Animation
{
[QuitRentAnimation translationAnimationView:self.cloudImageView_1 animationDuration:10 animationBlock:^{
self.cloudImageView_1.x = 0;
[self cloudImageView_1Animation];
}];
}
//给云彩2做平移动画
- (void)cloudImageView_2Animation
{
[QuitRentAnimation translationAnimationView:self.cloudImageView_2 animationDuration:10 animationBlock:^{
self.cloudImageView_2.x = -SCREEN_WIDTH;
[self cloudImageView_2Animation];
}];
}
加好缩放以及绘制绿色虚线

由上面的效果gif可以看出来,加好缩放以及绘制绿色虚线是一个动画完成的
思路:
加好缩放以及绘制绿色虚线,他们是有先后顺序的,UIView动画有一个回调,我们在一个动画完成后再进行另外一个
第一,加号试图是一个缩放动画,做这个缩放动画其实很简单,按照上面的思路,先把他放大一下,再缩小一下,再放大,复原即可,demo如下:

+ (void)scalingAnimationView:(UIView *)view animationBlock:(QuitRentAnimationBlock)block
{
view.transform = CGAffineTransformMakeScale(1.0, 1.0); [UIView animateWithDuration:0.3 animations:^{ view.transform = CGAffineTransformMakeScale(1.2, 1.2); }completion:^(BOOL finish){ [UIView animateWithDuration:0.3 animations:^{ view.transform = CGAffineTransformMakeScale(0.9, 0.9); }completion:^(BOOL finish){ [UIView animateWithDuration:0.3 animations:^{ view.transform = CGAffineTransformMakeScale(1.1, 1.1); }completion:^(BOOL finish){
[UIView animateWithDuration:0.3 animations:^{ view.transform = CGAffineTransformMakeScale(1, 1); }completion:^(BOOL finish){
block();
}];
}];
}];
}];
}

然后是绘制绿色虚线,这地方我遇到了挺多的坑,在现在的放慢gif中可以看出很大的缺点,就是绿色的线没有完全按照灰色的点上走,我目前还没有想到更好的优化方法,先把这个给大家分享出来,大家看一下吧
先创建一个绘制虚线试图

- (void)drawRect:(CGRect)rect{
[super drawRect:rect]; CGContextRef currentContext = UIGraphicsGetCurrentContext(); //设置虚线颜色
CGContextSetStrokeColorWithColor(currentContext, self.lineColor.CGColor);
//设置虚线宽度
CGContextSetLineWidth(currentContext, 2); //设置虚线绘制起点
CGContextMoveToPoint(currentContext, 2 * 0.5, 0.0);
//设置虚线绘制终点
CGContextAddLineToPoint(currentContext, 2 * 0.5, CGRectGetHeight(self.bounds));
//设置虚线排列的宽度间隔:下面的arr中的数字表示先绘制3个点再绘制1个点
CGFloat arr[] = {2,2};
//下面最后一个参数“2”代表排列的个数。
CGContextSetLineDash(currentContext, 0, arr, 2);
CGContextDrawPath(currentContext, kCGPathStroke);
CGContextStrokePath(currentContext);
}

然后继承于这个view,做宽度为1,高度为我们想要的动画,动画代码如下:

//垂直移动动画
+ (void)verticalAnimationView:(UIView *)view animationDuration:(NSTimeInterval)timer animationDistance:(CGFloat)animationDistance animationBlock:(QuitRentAnimationBlock)block
{
[UIView animateWithDuration:timer animations:^{
view.height = view.height + animationDistance; } completion:^(BOOL finished) {
if (finished) {
block();
}
}];
}

结合上面的思路,把每个动画点起来

//给对号线条,垂直虚线做动画
- (void)quitRentSucessImageViewAnimation
{
int i = 2;
// int i = 2;
// int i = 3;
CGFloat greenLine_1_Distance;
CGFloat greenLine_2_Distance;
if (i == 0) {
greenLine_1_Distance = 30 * KHeight_Scale;
}else if (i == 1){
greenLine_1_Distance = 60 * KHeight_Scale;
greenLine_2_Distance = 55 * KHeight_Scale;
}else if (i == 2){
greenLine_1_Distance = 60 * KHeight_Scale;
greenLine_2_Distance = 110 * KHeight_Scale;
}
WEAKSELF
[QuitRentAnimation scalingAnimationView:weakSelf.quitRentSucessImageView animationBlock:^{ [self addSubview:self.greenLine1];
[self.greenLine1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(weakSelf.quitRentSucessImageView.mas_bottom);
make.centerX.mas_equalTo(weakSelf.detainMoneyAccountTitleLabel.mas_right).offset(25/2+5);
make.width.mas_equalTo(2);
make.height.mas_equalTo(greenLine_1_Distance);
}]; [QuitRentAnimation verticalAnimationView:weakSelf.greenLine1 animationDuration:0.8 animationDistance:greenLine_1_Distance animationBlock:^{
if (i == 0) return ; weakSelf.houseConnectSucessImageView.image = [UIImage imageNamed:@"icon_pay_money_duihao"];
[QuitRentAnimation scalingAnimationView:weakSelf.houseConnectSucessImageView animationBlock:^{ [weakSelf addSubview:weakSelf.greenLine2]; [weakSelf.greenLine2 mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(weakSelf.houseConnectSucessImageView.mas_bottom);
make.centerX.mas_equalTo(weakSelf.detainMoneyAccountTitleLabel.mas_right).offset(25/2+5);
make.width.mas_equalTo(2);
make.height.mas_equalTo(greenLine_2_Distance);
}];
[QuitRentAnimation verticalAnimationView:weakSelf.greenLine2 animationDuration:1 animationDistance:greenLine_2_Distance animationBlock:^{
weakSelf.detainMoneyAccountSucessImageView.image = [UIImage imageNamed:@"icon_pay_money_duihao"];
[QuitRentAnimation scalingAnimationView:weakSelf.detainMoneyAccountSucessImageView animationBlock:^{
//
}];
}];
}]; }]; }];
}

链接:http://www.jianshu.com/p/9c3ccd2eeafe

iOS 一个小动画效果-b的更多相关文章

  1. iOS酷炫动画效果合集

    iOS酷炫动画效果合集 源码地址 https://github.com/YouXianMing/Animations 效果绝对酷炫,包含了多种多样的动画类型,如POP.Easing.粒子效果等等,虽然 ...

  2. 收藏一个带动画效果的ScrollViewer以及ScrollBar的模板

    这里介绍一个带动画效果的ScrollViewer和ScrollBar,总共分为两个资源字典,直接拿来引用即可: 1 ScrollBarStyle.xaml <ResourceDictionary ...

  3. 轻松实现Android,iOS的一个手势动画效果

    先来看效果 这是iOS下的效果,android下完全一致.通过do_GestureView组件和do_Animation组件,deviceone能很容易实现复杂的跨平台纯原生动画效果,这个示例就是通过 ...

  4. iOS的GIF动画效果实现

    引言:GIF图像格式是常见的一种动态图片格式,无论是在Web端还是在移动端都经常遇到,但是考虑目前iOS还无法原生展现GIF图片,而对于GIF的原生支持暂时也没有像JPG.PNG等图像格式支持得这么全 ...

  5. 推荐一个以动画效果显示github提交记录的黑科技工具:Gource

    程序员每天都会使用到git的一系列命令.其中用git log命令可以查看提交历史记录: 今天Jerry给大家推荐一款视觉效果非常酷炫的工具,名叫Gource,是一个能够将git代码仓库的提交历史以动画 ...

  6. 一个带动画效果的颜色选择对话框控件AnimatedColorPickerDialog

    android4.4的日历中选择日程显示颜色的时候有一个颜色选择对话框非常漂亮,模仿他的界面我实现了一个类似的对话框,而且带有动画效果. 代码的实现可讲的地方不多,主要是采用了和AlertDialog ...

  7. 【Android初级】如何实现一个有动画效果的自定义下拉菜单

    我们在购物APP里面设置收货地址时,都会有让我们选择省份及城市的下拉菜单项.今天我将使用Android原生的 Spinner 控件来实现一个自定义的下拉菜单功能,并配上一个透明渐变动画效果. 要实现的 ...

  8. ios UIView常用动画效果

    一 //调用 1 2 3 4 5 6 if(m_viewScenario.superview == nil)<br>{     m_viewScenario.alpha = 1.0;    ...

  9. 一个小动画,颠覆你的CSS世界观

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

随机推荐

  1. 什么是哈希码(HashCode)

    什么是哈希码(HashCode) 在Java中,哈希码代表对象的特征. 例如对象 String str1 = “aa”, str1.hashCode= 3104 String str2 = “bb”, ...

  2. hdu Boring count(BestCode round #11)

    Boring count Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot ...

  3. 解决:Failure to transfer org.apache.maven.plugins:maven-jar-plugin:pom:2.4 from错误

    在使用Maven时出现以下错误: Failure to transfer org.apache.maven.plugins:maven-jar-plugin:pom:2.4 from https:// ...

  4. Android NDK开发篇(六):Java与原生代码通信(异常处理)

    一.捕获异常 异常处理是Java中的功能.在Android中使用SDK进行开发的时候常常要用到.Android原生代码在运行过程中假设遇到错误,须要检測,并抛出异常给Java层.运行原生代码出现了问题 ...

  5. python 读取单所有json数据写入mongodb(单个)

    <--------------主函数-------------------> from pymongo import MongoClientfrom bson.objectid impor ...

  6. 详解使用DockerHub官方的mysql镜像生成容器

    详解使用DockerHub官方的mysql镜像生成容器 收藏 yope 发表于 10个月前 阅读 1506 收藏 32 点赞 1 评论 0 腾讯云·云上实验室:开发者零门槛,免费使用真机在线实验!&g ...

  7. ZH奶酪:PHP 使用DOMDocument抓取网页

    原文链接:http://blog.csdn.net/xyzhaopeng/article/details/6626340 从一个HTML页面的一个表格中提取数据并且将这个数据整理出来加入到MySQL数 ...

  8. C++ 第十二课 其它标准C函数

    abort() 停止程序执行 assert() 当表达式非真,停止程序执行 atexit() 当程序退出执行设定的程序 bsearch() 执行折半查找 exit() 停止程序执行 getenv() ...

  9. Struts 2相关配置与基本操作演示(案例Demo)

    基本介绍 Struts 2        Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2 ...

  10. 〖Android〗JDK7签名apk出现INSTALL_PARSE_FAILED_NO_CERTIFICATES的解决方法

    由于某项需求,把JDK版本从JDK6升级到了JDK7: 但是签名APK之后出现了INSTALL_PARSE_FAILED_NO_CERTIFICATES的错误: 解决方法: 在签名时,添加参数 -di ...