This is a custom triangle view I have. Its much simpler than a bezier path but I believe it should work about the same. I also have a category that hittests based on alpha level on a pixel-per-pixel basis that I use for UIImages with alpha layers. (Its in this post Retrieving a pixel alpha value for a 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;
    }
}