如图,圈住的地方是带有圆角的内容背景,要给它加阴影。
wecom-temp-ee8039fa2909c4a0f1454164482e8ffe.png//分类方法:
-(CALayer *)setShadowLayerWithRadius:(CGFloat)radius{
CALayer *subLayer = [CALayer layer];
subLayer.frame = CGRectMake(self.frame.origin.x+.1, self.frame.origin.y+.1, self.frame.size.width-.2, self.frame.size.height-.2);
subLayer.cornerRadius=radius;
subLayer.backgroundColor=[[UIColor blackColor] colorWithAlphaComponent:0.2].CGColor;
subLayer.masksToBounds=NO;
subLayer.shadowColor = [UIColor blackColor].CGColor;//shadowColor阴影颜色
subLayer.shadowOffset = CGSizeMake(-1.5, 1.5);//shadowOffset阴影偏移,x向右偏移3,y向下偏移2,默认(0, -3),这个跟shadowRadius配合使用
subLayer.shadowOpacity = 0.3;//阴影透明度,默认0
subLayer.shadowRadius = radius;//阴影半径,默认10
[[self superview].layer insertSublayer:subLayer below:self.layer];
return subLayer;
}
用上述代码方法即可,但是这种方式在列表就会异常。
Q:
1.阴影可能超出或者显示不全
2.滑动过程中,阴影越来越黑。
A:
Q1是因为以当前view的frame来创建CALayer,如果中间变更frame, CALayer的frame就会沿用旧的view的frame, 导致问题出现。
Q2是在Q1的基础上,复用了Cell,CALayer不断叠加
因此,必须在TableviewCell复用过程中移除CALayer, 在新的frame下,重新生成CALayer的阴影。
-(void)setModel:(XXXModel *)model{
self.bgViewHeightConstraint.constant = 220 - (isABC ? 0 : 40);
self.BGView.frame = CGRectMake(self.BGView.x, self.BGView.y, self.BGView.width, self.bgViewHeightConstraint.constant);
[self.BGView setShadowLayerWithRadius:10];
}
- (void)prepareForReuse {
[super prepareForReuse];
for (CALayer *layer in self.BGView.layer.sublayers) { if ([layer isKindOfClass:
[CALayer class]]) {[layer removeFromSuperlayer];break;}}
}
至此,就不会再出现Q1,Q2的问题了
网友评论