看到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, 1, 0, 0); }completion:^(BOOL finished) { }];
当然你也可以用这个方法:
CABasicAnimation* rotationAnimation; rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.x"]; [self setAnchorPointTo:CGPointMake(0.5, 0) view:self.secondView]; rotationAnimation.fromValue = [NSNumber numberWithFloat: M_PI ]; rotationAnimation.toValue = [NSNumber numberWithFloat: 0 ]; rotationAnimation.duration = 3; rotationAnimation.cumulative = YES; rotationAnimation.repeatCount = 1;
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 = 3;// 阴影扩散的范围控制 targetView.layer.shadowOffset = CGSizeMake(3, 3);// 阴影的范围 }
Demo地址:点击这里
有什么bug,还请告知。