UITableView实现格瓦拉飞天投票模块
格瓦拉目前来说动画效果确实做的还比较好,虽然不是说很炫但做到精致,这次就模仿了它投票的模块。其实想到要实现它还是有很多方法,不过这次我还是采用了苹果自带控件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.framevoteView:voteModel];voteView.layer.masksToBounds = NO;[self.tableView addSubview:voteView];self.tableView.userInteractionEnabled = NO;[UIView animateWithDuration:0.4animations:^{ 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实现格瓦拉飞天投票模块的更多相关文章
- UITableView实现格瓦拉飞天投票模块-b
格瓦拉目前来说动画效果确实做的还比较好,虽然不是说很炫但做到精致,这次就模仿了它投票的模块.其实想到要实现它还是有很多方法,不过这次我还是采用了苹果自带控件UITableView简简单单来实现它,再次 ...
- 关于phpcms v9投票模块选项排序listorder设定问题
关于phpcms v9投票模块选项排序listorder设定问题修改,主要修改了三个文件三处地方. 主要修改三个文件: .phpcms\modules\vote\templates\vote_edit ...
- Django项目-个人网站之投票模块
Django项目之个人网站 关注公众号"轻松学编程"了解更多. Github地址:https://github.com/liangdongchang/MyWeb.git 感兴趣的可 ...
- swift实现UItableview上拉下拉刷新模块
最近用写个项目 发现上拉下拉刷新模块没找到合适的 so 自己写了一个 由于最近忙 教程就不写了 里面有 直接贴地址https://github.com/DaChengTechnology/DCRefr ...
- (转)投票系统,更改ip刷票
前言 相信大家平时肯定会收到朋友发来的链接,打开一看,哦,需要投票.投完票后弹出一个页面(恭喜您,您已经投票成功),再次点击的时候发现,啊哈,您的IP(***.***.***.***)已经投过票了,不 ...
- Django来敲门~第一部分【4. 创建第一个模块应用】
成若缺,其用不弊.大盈若冲,其用不穷.大直若屈.大巧若拙.大辩若讷.静胜躁,寒胜热.清静为天下正 ——老子<道德经> 本章内容 创建应用(app) 开发第一个视图(View) URL访问配 ...
- Drupal 有用的模块
投票模块drigg https://www.drupal.org/project/drigg
- 【4】Django 创建第一个模块应用
大成若缺,其用不弊.大盈若冲,其用不穷.大直若屈.大巧若拙.大辩若讷.静胜躁,寒胜热.清静为天下正 --老子<道德经> 本章内容 创建应用(app) 开发第一个视图(View) URL访问 ...
- 快速web开发中的前后端框架选型最佳实践
这个最佳实践是我目前人在做的一个站点,主要功能: oauth登录 发布文章(我称为"片段"),片段可以自定义一些和内容有关的指标,如“文中人物:12”.支持自定义排版.插图.建立相 ...
随机推荐
- 对同一个项目下的多个数据库Context进行迁移Migrations
PM> Enable-Migrations -MigrationsDirectory "Migrations\ContextA" -ContextTypeName MyPro ...
- UVa 1606 (极角排序) Amphiphilic Carbon Molecules
如果,没有紫书上的翻译的话,我觉得我可能读不懂这道题.=_=|| 题意: 平面上有n个点,不是白点就是黑点.现在要放一条直线,使得直线一侧的白点与另一侧的黑点加起来数目最多.直线上的点可以看作位于直线 ...
- HDU 5319 Painter
题意:红色从左上向右下涂,蓝色从右上向左下涂,既涂红色又涂蓝色就变成绿色,问最少涂几下能变成给的图. 解法:模拟一下就好了,注意细节. 代码: #include<stdio.h> #inc ...
- Python脚本控制的WebDriver 常用操作 <五> 访问链接
下面将使用webdriver来访问一个web链接 测试用例场景 测试中,经常会点击几个链接来进行操作,所以访问链接是基本的常见操作 Python脚本 from selenium import webd ...
- 未能加载文件或程序集“WcfService”或它的某一个依赖项。试图加载格式不正确的程序。
“/”应用程序中的服务器错误. 未能加载文件或程序集“WcfService”或它的某一个依赖项.试图加载格式不正确的程序. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息, ...
- error C2065:未声明的标识符错误
原文地址:http://blog.sina.com.cn/s/blog_8216ada701017evx.html 在VS2010下进行VC++调试时,出现这样一种错误:error C2065:未声明 ...
- NOIP 2015 神奇的幻方
模拟,注意为偶数的情况 #include<cstdio> #include<cstring> #include<cstdlib> #include<iostr ...
- codeforce 606B Testing Robots
题意:给定一个x*y的矩形,和一个机器人的初始位置(x0,y0).以向下为x轴正方向,向右为y轴正方向.现在要对这个机器人进行多次测试.每次测 试,会在矩形的某个位置有一个矿井.所以一共要进行x*y次 ...
- DLLImport
namespace Wintellect.Interop.Sound { using System; using System.Runtime.InteropServices; using Syste ...
- HW7.10
public class Solution { public static void main(String[] args) { int[][] array = new int[3][3]; for( ...