格瓦拉目前来说动画效果确实做的还比较好,虽然不是说很炫但做到精致,这次就模仿了它投票的模块。其实想到要实现它还是有很多方法,不过这次我还是采用了苹果自带控件UITableView简简单单来实现它,再次认识它的强大一面。

Github地址:https://github.com/ZFbaby/ZFVoteViewDemo(欢迎star~谢谢)

接着先上效果:

实现步骤:

* 数据回来的时候就要根据数据算出每一行的高度并且算出总高,总高就是tableview的高度

1
2
3
4
5
6
7
8
9
10
-(void)setTitle:(NSString *)title
{
    //根据数据算出每行cell的实际高度
    _title = title;
    CGFloat title_H = [title boundingRectWithSize:CGSizeMake(ZFVoteTableViewMax_W - percentLable_W - thumbUpView_WH - 85, 100)
    options:NSStringDrawingUsesFontLeading|NSStringDrawingUsesLineFragmentOrigin
    attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:15.0]}
    context:nil].size.height;
    self.voteCell_H = title_H + 30;
}

* 设置cell的内边距离及x值,利用setFrame:方法改变原来父类算好的frame实现cell有内边距离,达到实现相邻两条cell不连接在一起的效果

1
2
3
4
5
6
7
8
9
10
11
12
-(void)setFrame:(CGRect)frame{
    if (frame.size.width == ZFVoteTableViewMax_W) {//初始化就设置cell的内边距
        frame = UIEdgeInsetsInsetRect(frame,
        UIEdgeInsetsMake(ZFVoteCellTopBottomInset,
        ZFVoteCellLeftRightInset,
        ZFVoteCellTopBottomInset,
        ZFVoteCellLeftRightInset));
    }else{//重复利用的时候改变它的x值
        frame.origin.x += ZFVoteCellLeftRightInset;
    }
    [super setFrame:frame];
}

* 创建投票主控件并添加到cell上,投票主控件就是所有要展示动画效果的控件集合,有cell了为什么还需要它,其实说白了它就是打酱油的,只是为了呈现动画的一种载体,在看下面一条就了解了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
-(void)initSubviews{
    ZFPercentBar *bar = [[ZFPercentBar alloc]initWithFrame:self.bounds];
    self.bar = bar;
    [self addSubview:bar];
    UIImageView *thumbUpView = [[UIImageView alloc]init];
    self.thumbUpView = thumbUpView;
    [self addSubview:thumbUpView];
    UILabel *percentLable = [UILabel labelWithFont:[UIFont systemFontOfSize:13.0]
    textColor:[UIColor lightGrayColor]
    textAlignment:NSTextAlignmentRight
    numberOfLines:1];
    self.percentLable = percentLable;
    [self addSubview:percentLable];
    UILabel *voteLabel = [UILabel labelWithFont:[UIFont systemFontOfSize:15.0]
    textColor:[UIColor blackColor]
    textAlignment:NSTextAlignmentLeft
    numberOfLines:0];
    self.voteLabel = voteLabel;
    [self addSubview:voteLabel];
}

* 每次点击选择一个cell的时候创建个投票主控件,然后隐藏被选择的cell,改变主控件的形变添加阴影效果使它看起来有浮动效果,改变主控件坐标到当前tableView的第一行cell的位置,在利用tableview本身自带的功能交换行实现的方法就完成了cell之间的交换效果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
ZFVoteView *voteView = [[ZFVoteView alloc]initWithFrame:selectedCell.frame
voteView:voteModel];
voteView.layer.masksToBounds = NO;
[self.tableView addSubview:voteView];
self.tableView.userInteractionEnabled = NO;
[UIView animateWithDuration:0.4
animations:^{
    voteView.transform = CGAffineTransformMakeScale(1.05, 1.05);
}
completion:^(BOOL finished) 
{
        [UIView animateWithDuration:0.7
        animations:^{
            [self.list removeObject:voteModel];
            [self.list insertObject:voteModel atIndex:0];
            [self.tableView moveRowAtIndexPath:indexPath
            toIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
            voteView.centerY = selectedCell.centerY;
            voteView.centerX = selectedCell.centerX;
        }completion:^(BOOL finished) {
            [UIView animateWithDuration:0.4
        animations:^{
            voteView.transform = CGAffineTransformIdentity;
        }completion:^(BOOL finished) {
            [voteView removeFromSuperview];
            self.tableView.userInteractionEnabled = YES;
        }];
    }];
}];

说到这核心的东西也是差不多了,当然很有很多细节在里边,也还有很多需要完善的地方。

以上只是个人的对该模块按自己的想法和思路实现,最后还要感谢GraphKit作者,demo中部分绘图动画功能引用至它的方法及进行了小部分修改,

Github地址:https://github.com/ZFbaby/ZFVoteViewDemo

UITableView实现格瓦拉飞天投票模块的更多相关文章

  1. UITableView实现格瓦拉飞天投票模块-b

    格瓦拉目前来说动画效果确实做的还比较好,虽然不是说很炫但做到精致,这次就模仿了它投票的模块.其实想到要实现它还是有很多方法,不过这次我还是采用了苹果自带控件UITableView简简单单来实现它,再次 ...

  2. 关于phpcms v9投票模块选项排序listorder设定问题

    关于phpcms v9投票模块选项排序listorder设定问题修改,主要修改了三个文件三处地方. 主要修改三个文件: .phpcms\modules\vote\templates\vote_edit ...

  3. Django项目-个人网站之投票模块

    Django项目之个人网站 关注公众号"轻松学编程"了解更多. Github地址:https://github.com/liangdongchang/MyWeb.git 感兴趣的可 ...

  4. swift实现UItableview上拉下拉刷新模块

    最近用写个项目 发现上拉下拉刷新模块没找到合适的 so 自己写了一个 由于最近忙 教程就不写了 里面有 直接贴地址https://github.com/DaChengTechnology/DCRefr ...

  5. (转)投票系统,更改ip刷票

    前言 相信大家平时肯定会收到朋友发来的链接,打开一看,哦,需要投票.投完票后弹出一个页面(恭喜您,您已经投票成功),再次点击的时候发现,啊哈,您的IP(***.***.***.***)已经投过票了,不 ...

  6. Django来敲门~第一部分【4. 创建第一个模块应用】

    成若缺,其用不弊.大盈若冲,其用不穷.大直若屈.大巧若拙.大辩若讷.静胜躁,寒胜热.清静为天下正 ——老子<道德经> 本章内容 创建应用(app) 开发第一个视图(View) URL访问配 ...

  7. Drupal 有用的模块

    投票模块drigg https://www.drupal.org/project/drigg

  8. 【4】Django 创建第一个模块应用

    大成若缺,其用不弊.大盈若冲,其用不穷.大直若屈.大巧若拙.大辩若讷.静胜躁,寒胜热.清静为天下正 --老子<道德经> 本章内容 创建应用(app) 开发第一个视图(View) URL访问 ...

  9. 快速web开发中的前后端框架选型最佳实践

    这个最佳实践是我目前人在做的一个站点,主要功能: oauth登录 发布文章(我称为"片段"),片段可以自定义一些和内容有关的指标,如“文中人物:12”.支持自定义排版.插图.建立相 ...

随机推荐

  1. net remoting 服务器端订阅客户端(附源代码)

    remoting 在分布式应用中逐渐在企业级应用发展开来,最初提出分布式应用,主要目的是为了降低服务器的压力,将耗性能的处理放在另外一个程序中,然后将计算结果发送到另外一个应用中.而remoting就 ...

  2. poj 2185 (KMP)

    完全不会啊…… 附一份题解:http://blog.sina.com.cn/s/blog_69c3f0410100tyjl.html var i,j,k,r,c,x:longint; ch:..,.. ...

  3. Xcode8安装不成功, 需要升级系统. The operation couldn't be completed. cpio read error

    https://developer.apple.com/library/prerelease/content/documentation/DeveloperTools/Conceptual/Whats ...

  4. git参考书籍

    Pro GIt 简体中文版 http://iissnan.com/progit/

  5. BZOJ2038: [2009国家集训队]小Z的袜子(hose) 莫队算法

    要使用莫队算法前提 ,已知[l,r]的答案,要能在logn或者O(1)的时间得到[l+1,r],[l-1,r],[l,r-1],[l,r+1],适用于一类不修改的查询 优美的替代品——分块将n个数分成 ...

  6. QT数据库使用案列【联系人】-- 使用sqlite和QStringListModel

    [关于如何打包自己开发的程序为安装包,可以参考http://www.cnblogs.com/yuliyang/p/4242179.html] [简要功能介绍] 使用sqlite数据库和Qt搭建界面,实 ...

  7. 使用C语言实现二维,三维绘图算法(2)-解析曲面的显示

    使用C语言实现二维,三维绘图算法(2)-解析曲面的显示 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其 ...

  8. viedeo

    http://download.farsight.com.cn/download/Android.htm

  9. NOIP2006 金明的预算方案

    1.             金明的预算方案 (budget.pas/c/cpp) [问题描述] 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈 ...

  10. 【暑假】[深入动态规划]UVa 10618 Fun Game

    UVa 10618 Fun Game 题目: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=36035 思路:   一圈人围坐 ...