从下往上增加的柱状图生成动画(适用于统计类应用)

我们在一些统计,理财应用中,经常能看到很多的柱状图,用来直观的标注信息,最近一个朋友刚好在做这方面的应用,跑来问我这个怎么实现,我笑他不就是简单的实现一个动画嘛,额,然后自己去做的时候才发现各种坑.

1.所有的UIView子类中,UILabel不能实现效果

2.创建View和对View实现的动画效果要放在一个方法中

3.增加的height和减少的top(顶部y坐标)必须成2倍关系 或者 增加的height和增加的bottom(底部y坐标)必须成2倍关系

@最后,直接上代码,大家可以去试验下,我也不太清楚究竟是什么原理,有了解的欢迎给我留言

#import "HMTRootViewController.h"
#import "UIViewAdditions.h"

@interface HMTRootViewController ()

@property (nonatomic, strong)NSMutableArray *imageArray;
@property (nonatomic, strong)NSArray        *urlArray;

@property (nonatomic, strong)UIView *columnarView;  //  柱状图

@end

@implementation HMTRootViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

#pragma mark - 一个bug,创建view必须和动画增高在同一个方法里面
    self.columnarView = [[UIView alloc] initWithFrame:CGRectMake(10, 100, 40, 10)];
    self.columnarView.backgroundColor = [UIColor redColor];
    [self.view addSubview:_columnarView];

    //  用来对比,columnarView是否发生了偏移
    UIView *aa = [[UIView alloc] initWithFrame:CGRectMake(50, 150, 40, 10)];
    aa.backgroundColor = [UIColor brownColor];
    [self.view addSubview:aa];

    UIButton * button = [UIButton buttonWithType:UIButtonTypeSystem];
    button.frame = CGRectMake(100, 510, 80, 40);
    [button setTitle:@"生成" forState:UIControlStateNormal];
    [button addTarget:self action:@selector(onClickTextButton) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];

    [UIView animateWithDuration:2 animations:^{

        //  增加的height和减少的top(顶部y坐标)必须成2倍关系,才能保持动画的一致
        self.columnarView.height += 100;
        self.columnarView.top -= 50;

    } completion:^(BOOL finished) {
    }];

}

- (void)onClickTextButton{

    self.columnarView = [[UIView alloc] initWithFrame:CGRectMake(150, 100, 40, 10)];
    self.columnarView.backgroundColor = [UIColor redColor];
    [self.view addSubview:_columnarView];

    [UIView animateWithDuration:2 animations:^{

        //  增加的height和增加的bottom(底部y坐标)必须成2倍关系,才能保持动画的一致
        self.columnarView.height += 100;
        self.columnarView.bottom = 160; // self.columnarView.bottom += 50 不能实现

    } completion:^(BOOL finished) {
    }];

}

从下往上增加的柱状图生成动画(适用于统计类应用),布布扣,bubuko.com

时间: 2024-10-23 10:04:38

从下往上增加的柱状图生成动画(适用于统计类应用)的相关文章

上传应用并生成下载链接需要多少钱;安卓市场上传应用需要什么

联系QQ:2205357007 上传应用并生成下载链接需要多少钱:安卓市场上传应用需要什么 上传应用程序到安卓分发市场时,经常需要填写一些有关apk安装包的信息.而作为非技术开发人员的我们同样需要识记一下这些信息,在下载安装包.安装应用到手机时,都是非常有用的. 目前,安卓应用的分发市场很多,但不需要所有的市场都要上传一遍,尤其是覆盖用户数量小的分发市场.常见的分发市场有: 百度系:百度手机助手.91手机助手.安卓市场 360手机助手.淘宝手机助手.小米手机助手.腾讯应用宝.豌豆荚.机锋市场等这

centos6上增加磁盘配额限制

建五个用户,均需要进行磁盘配额限制,每个用户的配额为 10MB (hard) 以及 8MB (soft) 0 环境 [[email protected] ~]# uname -a Linux localhost.localdomain 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux [[email protected] ~]# nl /etc/issue 1  Cen

史上最简洁C# 生成条形码图片思路及示例分享

在网上看到一些人写关于条形码的代码都很长,有的甚至拿来卖,所以查了下资料,希望能对大家有帮助. 我的实现原理是: 其实Windows本身就有一个字体是用来显示条形码的. 只要将数字改为这种字体就变成了条形码. windows字体库下,有如下八种字体可以用来将数字转换成条形码: 代码如下: Code39AzaleaNarrow1 Code39AzaleaNarrow2 Code39AzaleaNarrow3 Code39AzaleaRegular1 Code39AzaleaRegular2 Cod

在iOS上增加手势锁屏、解锁功能

在iOS上增加手势锁屏.解锁功能 在一些涉及个人隐私的场景下,尤其是当移动设备包含太多私密信息时,为用户的安全考虑是有必要的. 桌面版的QQ在很多年前就考虑到用户离开电脑后隐私泄露的危险,提供了“离开电脑自动锁定”或者“闲置锁定”等类似功能,具体我也忘了. 而在iPhone版的QQ上,也提供了手势锁的功能.如下图: 我在上一篇博文中简单提到如何根据手指移动画线条,而这里是进一步的版本,仍然只是粗糙原型: 具体的代码实现如下: [cpp]  //  //  ViewController.m  //

AIX上增加逻辑卷时报错误0516-787 extendlv: Maximum allocation for logical volume

AIX上增加逻辑卷时报错误0516-787 extendlv: Maximum allocation for logical volume jdelv02 is 512. 在往aix使用chfs -a size=xx /fs 命令增加逻辑卷的时候,有时候增加到一定大小的时候,会报出0516-787 extendlv: Maximum allocation for logical volume jdelv02 is 512.这样的一个错误原因主要是因为在默认情况下的逻辑卷允许的最大逻辑分区数为51

十分钟搭建主流框架_下拉/上拉刷新数据(OC)

本节主题(网络部分-下拉/上拉刷新) 源码地址在文章末尾 达成效果 下拉刷新数据 上拉加载更多数据 前言 经过十分钟搭建主流框架_简单的网络部分(OC)的介绍,相信你已经实现了基本的联网获取数据,但只是粗糙的获取了固定的数据,下面就让我们来实现下拉刷新和上拉加载更多吧.同样,我们先来做准备工作吧. 准备工作 Github寻找优秀的第三方刷新框架 1.前人种树,后人乘凉.有优秀的第三方框架可以使用,当然是极好的,可以大大提高我们的开发效率,如有特殊需求只能自己手写就除外了 Refresh 2.查阅

[Erl_Question06]在Erlang shell怎么在目录A下编译目录B下的文件,并把生成文件统一放置目录C?

问题描述: 我们想快速测试一个小功能,第一个反应就是打开Erl shell 直接输入,但是当想测试一个复杂的函数时,一般会写成一个*.erl文件,然后在shell下: cd(FileDir). c(FileName). 每次都为一个小功能设置FileDir,好烦! 解决方法: 方法1 .  在erlang工作目录[在erl shell中运行pwd()显示的目录]建立一个.erlang文件,输入: io:format("changing work path~n"). cd("你

如何在Win8.1和Win2012上运用PowerShell快速生成、安装、导出自签名证书 (Self-Signed Certificate)

自签名证书用途很广,测试,开发,本地或者云端网站(比如Microsoft Azure Web Site)都会使用到.本文会介绍一种在Win8.1和Win2012 R2上使用PowerShell快速生成自签名证书,自动导出私钥并在LocalMachine\My和LocalMachine\Root下自动安装的方法.非常易用. 目前来说,我们已有的创建Self-Signed证书方法包括用MakeCert和CertMgr的,用SelfSSL或SelfSSL7的,用IIS 7/8自带功能的,或者用比较复杂

JS为Select下拉框增加输入功能

JavaScript使用parentNode.nextSibling.value实现的本功能,实际上你会发现网页上有两个控件元素,一个是Select,一个是input,使用CSS将input覆盖于select之上,再使用JS将下拉框的值赋值给input,实际上是用input模拟出了select的功能,思路很新颖,也不知到底有多少人需要select可输入文字的功能,下面是详细的实现代码:前端资源分享 .代码   <div style="position:relative;">