如何让UITableView使用CAShapeLayer掩码?

时间:2012-07-05 10:16:49

标签: ios uitableview cashapelayer

我想以三角形的形状掩盖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不会将触摸路由到内部的表视图。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

TableView子类UIScrollView。并且UITableViewDelegate符合UIScrollViewDelegate,因此您可以覆盖scrollViewDidScroll并根据UIScrollView contentOffset移动遮罩层

答案 1 :(得分:0)

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