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;
}
これは今のところうまくいきます。これは、三角形のような形のテーブル ビューができたからです。しかし、テーブルビューをスクロールできないという問題があります。スーパービューは、タッチを内部のテーブル ビューにルーティングしません。何か案は?