我想以三角形的形状掩盖UITableView。我的第一种方法是设置CAShapeLayer并将其直接添加为表视图中的掩码。但是,我得到了三角形的形状与桌面视图一起滚动。
我的下一个方法是将表格视图放在UIView中作为具有完全相同位置和大小的超级视图。在下面的代码片段中,self.triangleView是超级视图。
- (void)viewDidLoad
{
[super viewDidLoad];
CAShapeLayer *mask = [[[CAShapeLayer alloc] init] autorelease];
mask.frame = _tableView.bounds;
mask.fillColor = [[UIColor blackColor] CGColor];
CGFloat width = self.triangleView.frame.size.width;
CGFloat height = self.triangleView.frame.size.height;
CGMutablePathRef path = CGPathCreateMutable();
// draw the triangle
CGPathMoveToPoint(path, NULL, 0, height);
CGPathAddLineToPoint(path, NULL, width, 0);
CGPathAddLineToPoint(path, NULL, width, height);
CGPathCloseSubpath(path);
mask.path = path;
CGPathRelease(path);
self.triangleView.layer.mask = mask;
}
到目前为止,这是有效的,因为我现在有一个形状像三角形的表格视图。但我现在有问题,我无法滚动表格视图。 superview不会将触摸路由到内部的表视图。有什么想法吗?
答案 0 :(得分:0)
TableView子类UIScrollView。并且UITableViewDelegate符合UIScrollViewDelegate,因此您可以覆盖scrollViewDidScroll并根据UIScrollView contentOffset移动遮罩层
答案 1 :(得分:0)
解决方案是在层次结构中再使用一个UIView,然后屏蔽它们的顶部。听起来很奇怪,但对我有用。