0

我想以三角形的形状掩盖 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;
}

到目前为止,这很有效,因为我现在有一个形状像三角形的表格视图。但我现在有问题,我无法滚动表格视图。超级视图不会将触摸路由到内部的表格视图。有任何想法吗?

4

2 回答 2

0

TableView 是 UIScrollView 的子类。并且 UITableViewDelegate 符合 UIScrollViewDelegate,所以你可以覆盖 scrollViewDidScroll 并根据 UIScrollView contentOffset 移动你的遮罩层

于 2012-07-05T11:42:40.897 回答
0

解决方案是在层次结构中再使用一个 UIView 来掩盖它们的顶部。听起来很奇怪,但对我有用。

于 2012-07-18T10:04:16.717 回答