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

解決策は、階層内でもう 1 つの UIView を使用して、それらの上部をマスクすることでした。奇妙に聞こえますが、私にとってはうまくいきます。

于 2012-07-18T10:04:16.717 に答える