关于这个话题我想解决的问题以及会达到什么效果,看图说话。
问题 结果- 在介绍思路之前必须了解「mask」这个属性,了解了mask,做起来就相当简单了!
mask PropertyMask 英文解释是蒙板/面罩,平时我们称为蒙层. 在苹果官方文档里如下图,意思是Mask是一个可选的Layer,它可以是根据透明度来掩盖Layer的内容.
Layer的透明度决定了Layer内容是否可以显示,非透明的内容和背景可以显示,透明的则无法显示.
- 思路
<small>我们只需要将cell.layer.mask的frame设置为cell在期望的可视范围存在的多少就可以了。
什么是期望的可视范围?一张图说明。
</small>
-
代码
// 剪除在透明背景下的cell,即只设置可视范围的cell.layer.mask的frame - (void)clipOutSideCellWhenUnderTransparencySectionSetMaskFrame:(CGRect)frame { CALayer *maskLayer = [CALayer layer]; maskLayer.backgroundColor = [UIColor whiteColor].CGColor; maskLayer.frame = frame; self.layer.mask = maskLayer; } // 使用 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { [_tableView.visibleCells enumerateObjectsUsingBlock:^(__kindof UITableViewCell * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { // cell和section覆盖的高度 = 需要剪去的高度 20是contentInset, 100是sectionHeight,再减去cell的y CGFloat hideCellHeight = scrollView.contentOffset.y + 20 + 100 - obj.frame.origin.y; CGRect maksFrame = obj.bounds; if (hideCellHeight > 0 && hideCellHeight <= obj.frame.size.height) { maksFrame = CGRectMake(0, hideCellHeight, obj.frame.size.width, obj.frame.size.height - hideCellHeight); } else if (hideCellHeight > obj.frame.size.height) { maksFrame = CGRectZero; } [obj clipOutSideCellWhenUnderTransparencySectionSetMaskFrame:maksFrame]; }]; }
附件
<small>
参考资料
<small>
网友评论