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

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

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

接着先上效果:

实现步骤:

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

-(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不连接在一起的效果

-(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了为什么还需要它,其实说白了它就是打酱油的,只是为了呈现动画的一种载体,在看下面一条就了解了

-(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之间的交换效果

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

时间: 2024-08-25 20:35:48

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

UITableView实现格瓦拉飞天投票模块

格瓦拉目前来说动画效果确实做的还比较好,虽然不是说很炫但做到精致,这次就模仿了它投票的模块.其实想到要实现它还是有很多方法,不过这次我还是采用了苹果自带控件UITableView简简单单来实现它,再次认识它的强大一面. Github地址:https://github.com/ZFbaby/ZFVoteViewDemo(欢迎star~谢谢) 接着先上效果: 实现步骤: * 数据回来的时候就要根据数据算出每一行的高度并且算出总高,总高就是tableview的高度 1 2 3 4 5 6 7 8 9

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

关于phpcms v9投票模块选项排序listorder设定问题修改,主要修改了三个文件三处地方. 主要修改三个文件: 1.phpcms\modules\vote\templates\vote_edit.tpl.php中找到 代码如下: <input type="text" name="option[<?php echo $option['optionid']?>]" size="40" require="true&q

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

成若缺,其用不弊.大盈若冲,其用不穷.大直若屈.大巧若拙.大辩若讷.静胜躁,寒胜热.清静为天下正 ——老子<道德经> 本章内容 创建应用(app) 开发第一个视图(View) URL访问配置的嵌套(urls) 1. 创建项目的子模块应用 上一节内容中,我们创建了一个django项目mysite/,在项目的骨架的基础上,我们再创建基于项目的一个子模块投票模块,模块名称暂时定义为polls 进入项目目录,执行如下命令,在mysite/项目基础上创建一个模块应用polls python3 manag

阿里飞天云平台架构简介

飞天是由阿里云开发的一个大规模分布式计算系统,其中包括飞天内核和飞天开放服务. 飞天内核负责管理数据中心Linux集群的物理资源,控制分布式程序运行, 隐藏下层故障恢复和数据冗余等细节,有效提供弹性计算和负载均衡.如图所示,飞天体系架构主要包含四大块:1.资源管理.安全.远程过程调用等构建分布式系统常用的底层服务;2.分布式文件系统;3.任务调度;4.集群部署和监控. 飞天开放服务为用户应用程序提供了计算和存储两方面的接口和服务,包括弹性计算服务(Elastic ComputeService,简

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

大成若缺,其用不弊.大盈若冲,其用不穷.大直若屈.大巧若拙.大辩若讷.静胜躁,寒胜热.清静为天下正 --老子<道德经> 本章内容 创建应用(app) 开发第一个视图(View) URL访问配置的嵌套(urls) 1. 创建项目的子模块应用 上一节内容中,我们创建了一个django项目mysite/,在项目的骨架的基础上,我们再创建基于项目的一个子模块投票模块,模块名称暂时定义为polls 进入项目目录,执行如下命令,在mysite/项目基础上创建一个模块应用polls python3 mana

(五)基于区块链的投票系统的设计与实现

1.需求分析 1.1 用户群体分析 需要进行投票表决的学校小团体.商业董事会群体.政府人员等. 1.2 系统用途概述 本系统是一个基于区块链技术的线上投票系统.针对目前线上投票系统中出现的恶意刷票.数据安全.隐私泄露等问题,本系统结合区块链技术的去中心化.数据不可篡改.可匿名性等特点,可以保证投票系统的投票数据公正.公开.可验证.不可篡改,提高投票系统的可信任性.用户可以通过本系统进行投票项目的创建.规定投票时间.注册投票等操作,系统同时提供投票数据可追溯可验证的功能,旨在给用户构建一个更加高效

PHPCMS 使用图示和PHPCMS二次开发教程(转)

PHPCMS V9 核心文件说明 模块与控制器 模块: phpcms v9框架中的模块,位于phpcms/modules目录中 每一个目录称之为一个模块.即url访问中的m. 访问content模块示例:http://www.yourname.com/index.php?m=content 控制器: phpcms v9的控制器就是模块的类文件,位于phpcms/modules/模块/目录下面.类名成就是文件名+.php,例如一个名为abc的控制器,那么他的命名为abc.php即可.控制器类默认继

Moodle插件开发——Blocks(版块)

前提: 1)     基于Moodle3.0,要求Moodle版本高于2.0 2)     PHP编程基础:语言的了解和开发工具使用 有经验的开发人员和那些只是想程序员的参考文本应参阅附录A. 1.   简述 从无到有,创建一个名为“SimpleHtml”的版块,为了保持一致性,遵循使用小写“simplehtml”.同时新建版块相应文件均在/blocks/simplehtml目录下.每当一个文件的路径在本文档中提到的,它会始终以斜线开始.这是指Moodle的主目录: 所有文件和目录将相对于该目录

drupal 内容类型

一.drupal核心下载 https://drupal.org/download 3二.下载中文语言包 https://localize.drupal.org 图1,图2 也可以直接点击:https://localize.drupal.org/translate/languages/zh-hans 三.内容类型 1.结构->内容类型: 名称 内容类型的状态:提交表单设置 发布选项 评论设置 菜单设置 2.添加字段 结构->内容类型->电影管理字段 编辑 管理字段 管理显示 评论字段 评论