【问题标题】:How to get an UITableView working with CAShapeLayer mask?如何让 UITableView 与 CAShapeLayer 掩码一起使用?
【发布时间】:2012-07-05 10:16:48
【问题描述】:

我想将 UITableView 屏蔽为三角形。我的第一种方法是设置一个 CAShapeLayer 并将其作为蒙版直接添加到表格视图中。但随后,我得到了与表格视图一起滚动的三角形。

我的下一个方法是将表格视图作为具有完全相同位置和大小的超级视图放在 UIView 中。在下面的代码sn-p中,self.triangleView就是superview。

- (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;
}

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

【问题讨论】:

    标签: ios uitableview cashapelayer


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-05
        • 2013-09-30
        • 1970-01-01
        • 2022-01-22
        • 2023-04-10
        • 1970-01-01
        • 1970-01-01
        • 2020-09-12
        相关资源
        最近更新 更多