これは私が持っているカスタムの三角形のビューです。ベジェパスよりもはるかに単純ですが、ほぼ同じように機能するはずです。また、アルファレイヤーを使用するUIImageに使用する、ピクセルごとのアルファレベルに基づいてヒットテストを行うカテゴリもあります。(この投稿では、UIImageのピクセルアルファ値を取得しています)
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextMoveToPoint(context, 0.0, 0.0);
CGContextAddLineToPoint(context, rect.size.width, 0.0);
CGContextAddLineToPoint(context, 0.0, rect.size.height);
CGContextClosePath(context);
CGContextSetFillColorWithColor(context, triangleColor.CGColor);
CGContextFillPath(context);
CGContextSaveGState(context);
[self.layer setShouldRasterize:YES];
[self.layer setRasterizationScale:[UIScreen mainScreen].scale];
}
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
CGMutablePathRef trianglePath = CGPathCreateMutable();
CGPathMoveToPoint(trianglePath, NULL, 0.0, 0.0);
CGPathAddLineToPoint(trianglePath, NULL, self.frame.size.width, 0.0);
CGPathAddLineToPoint(trianglePath, NULL, 0.0, self.frame.size.height);
CGPathCloseSubpath(trianglePath);
if (CGPathContainsPoint(trianglePath, nil, point, YES)) {
CGPathRelease(trianglePath);
return self;
} else {
CGPathRelease(trianglePath);
return nil;
}
}