自定义一个可以动态折叠的UITAbleViewCell
看到code 4APP上有一个折叠的UITAbleViewCell,不过是swift的,所以自己尝试做一个简单的可折叠的UITAbleViewCell
主要实现一个可以折叠的UITAbleViewCell
效果图如下:

用到下面这些知识点:
1.单边圆角:
我们经常会遇到一些情况需要进行单边圆角或者边界线的设置,我简单封装了一个类别,github网址
2.锚点的更改
项目中主要围绕view上边界进行3d旋转,所以在动画之前需要进行锚点的设置。
关于锚点的详细概念,可以参考我的另一篇博客:点击这里
因为锚点改变时,frame也会变动,所以在改变锚点时需要重新设置frame。
我这里主要用下面的代码进行锚点的更改:
- (void)setAnchorPointTo:(CGPoint)point view:(UIView*)view{
/*
CGRect frame = view.frame;
frame.origin.x+=(point.x - view.layer.anchorPoint.x) * view.frame.size.width;
frame.origin.y+=(point.y - view.layer.anchorPoint.y) * view.frame.size.height;
view.frame = frame;
view.layer.anchorPoint = point;
*/
//和上面注销掉的代码一个意思
view.frame = CGRectOffset(view.frame, (point.x - view.layer.anchorPoint.x) * view.frame.size.width, (point.y - view.layer.anchorPoint.y) * view.frame.size.height);
view.layer.anchorPoint = point;
}
3.旋转动画;
关于旋转动画,我用的是下面的方法:
[UIView animateWithDuration:0.3 animations:^{
self.ThirdView.layer.transform=CATransform3DMakeRotation(M_PI_2, , , );
}completion:^(BOOL finished) {
}];
当然你也可以用这个方法:
CABasicAnimation* rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.x"];
[self setAnchorPointTo:CGPointMake(0.5, ) view:self.secondView];
rotationAnimation.fromValue = [NSNumber numberWithFloat: M_PI ];
rotationAnimation.toValue = [NSNumber numberWithFloat: ];
rotationAnimation.duration = ;
rotationAnimation.cumulative = YES;
rotationAnimation.repeatCount = ;
4.md34
利用md34属性进行类似于翻页效果的设置,关于md34属性网上有很多文章说明,这里不做详细解释。
具体代码为:
//给containView添加偏移
CATransform3D transfrom3d = CATransform3DIdentity;
transfrom3d.m34 = -0.002;
self.InnerView.layer.sublayerTransform = transfrom3d;
5.阴影:
-(void)setShadow:(UIView*)targetView{
//阴影
targetView.layer.shadowOpacity = 1.0;// 阴影透明度
targetView.layer.shadowColor = [UIColor grayColor].CGColor;// 阴影的颜色
targetView.layer.shadowRadius = ;// 阴影扩散的范围控制
targetView.layer.shadowOffset = CGSizeMake(, );// 阴影的范围
}
Demo地址:点击这里
有什么bug,还请告知。
自定义一个可以动态折叠的UITAbleViewCell的更多相关文章
- JSTL,自定义一个标签的功能案例
1.自定义一个带有两个属性的标签<max>,用于计算并输出两个数的最大值: 2.自定义一个带有一个属性的标签<lxn:readFile src=“”>,用于输出指定文件的内容 ...
- springboot+zuul(一)------实现自定义过滤器、动态路由、动态负载。
参考:https://blog.csdn.net/u014091123/article/details/75433656 https://blog.csdn.net/u013815546/articl ...
- 在Dynamics CRM中自定义一个通用的查看编辑注释页面
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复162或者20151016可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 注释在CRM中的显示是比较特别, ...
- SpringMVC 自定义一个拦截器
自定义一个拦截器方法,实现HandlerInterceptor方法 public class FirstInterceptor implements HandlerInterceptor{ /** * ...
- jQuery Validate 表单验证插件----自定义一个验证方法
一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW 访问密码 f224 二.引入依赖包 <script src="../../scripts/j ...
- Spring自定义一个拦截器类SomeInterceptor,实现HandlerInterceptor接口及其方法的实例
利用Spring的拦截器可以在处理器Controller方法执行前和后增加逻辑代码,了解拦截器中preHandle.postHandle和afterCompletion方法执行时机. 自定义一个拦截器 ...
- 自定义View(7)官方教程:自定义View(含onMeasure),自定义一个Layout(混合组件),重写一个现有组件
Custom Components In this document The Basic Approach Fully Customized Components Compound Controls ...
- Volley HTTP库系列教程(5)自定义一个Volley请求
Implementing a Custom Request Previous Next This lesson teaches you to Write a Custom Request parse ...
- 在String()构造器不存在的情况下自定义一个MyString()函数,实现如下内建String()方法和属性:
在String()构造器不存在的情况下自定义一个MyString()函数,实现如下内建String()方法和属性: var s = new MyString("hello"); s ...
随机推荐
- ionic 2.x 3.x 打包 压缩
大家都知道Ionic项目ionic serve生成的js css 非常庞大,小有1m多,大有几m,文件如此大load页面的时候需要较长时间的加载,特别在生产环境中,灰常不利于用户体验. 因此我们需要进 ...
- 「PKUSC2018」真实排名(排列组合,数学)
前言 为什么随机跳题会跳到这种题目啊? Solution 我们发现可以把这个东西分情况讨论: 1.这个点没有加倍 这一段相同的可以看成一个点,然后后面的都可以. 这一段看成一个点,然后前面的不能对他造 ...
- 面向对象总结、configparser配置文件模块、logging日志模块
面向对象总结 # 学习态度# python基础 2个月# html css js jq 1个月 # 上课困 # 学习方法 :# 列出知识点# 例子 写了哪些 # 面向对象学了哪些块# 为什么要讲面向对 ...
- mongodb批量更新某个字段
查询出hospitalName是xx医院和openId以2开头的所有记录,并且更新my_booking表中的payType为1. db.getCollection('my_booking').find ...
- python连接mysql数据库简单例子
今天用pyhton2连接本地的mysql数据库,总的来说比较简单,但还是遇到一些小问题 代码如下: # -*- coding: utf-8 -*- import os import MySQLdb i ...
- C语言编码转换gb2312 to utf8,utf8 to gb2312 代码,GCC编译,支持Windows、Linux
编译:gcc -o f.exe f.c -liconv #include <stdio.h> #include <stdlib.h> #include <stddef.h ...
- netcore高性能Web服务器Kestrel分析
Kestrel是aspnetcore中的web服务器之一,其本身有跨平台,轻量级,高性能的特点 在 ryzen 1600 12核cpu 测试环境中,瞬间每秒处理请求数能达到2w5以上,与netty不相 ...
- echarts初探
最近经常看到echarts,觉得很有意思,并且这个库是百度开发的,目前来说使用的也很广泛,包括百度.阿里.腾讯.网易.小米.新浪.华为.联想.美团等一大批一线互联网公司在使用,且github上的sta ...
- charles重复发包工具/repeat
重复发包工具/repeat Charles 让你选择一个请求并重复,在测试后端接口的时候非常有用: Charles将请求重新发送到服务器,并将响应显示为新请求. 如果您进行后端更改并希望测试它们,用了 ...
- 详解C#委托和事件(二)
一.当我们使用关键字delegate声明一个自定义委托类型时,实际上是声明了一个该名称的类类型,继承自抽象类System.MulticastDelegate,还包含实例方法Invoke.BeginIn ...