2013-01-12 158 views
1

我有这样的代码来绘制圆角矩形:点是内圆角矩形?

void ContextAddRoundedRect(CGContextRef ctx, CGRect rect, CGFloat radius) { 
    CGFloat minX = CGRectGetMinX(rect); 
    CGFloat maxX = CGRectGetMaxX(rect); 
    CGFloat minY = CGRectGetMinY(rect); 
    CGFloat maxY = CGRectGetMaxY(rect); 

    CGContextMoveToPoint(ctx, minX + radius, minY); 
    CGContextAddArcToPoint(ctx, maxX, minY, maxX, minY + radius, radius); 
    CGContextAddArcToPoint(ctx, maxX, maxY, maxX - radius, maxY, radius); 
    CGContextAddArcToPoint(ctx, minX, maxY, minX, maxY - radius, radius); 
    CGContextAddArcToPoint(ctx, minX, minY, minX + radius, minY, radius); 
} 

我怎么能计算出,如果给定的CGPoint是我的矩形内,考虑圆角?

回答

3

而是直接建入CGContextRef这样的,你可以改为打造为UIBezierPath,然后用-[UIBezierPath containsPoint:]

当你准备好实际呈现的路径进入的背景下,你可以这样做通过:

CGContextAddPath(ctx, [myBezierPath CGPath]); 
+0

这是伟大的,依然看着UIBezierPath,看看我能做到像'CGContextAddArcToPoint'无必须学习任何新的几何。 –

+0

@Yar对于UIBezierPath不支持的东西,您可以访问它的'CGPath'属性,执行'CGMutablePathRef'操作,然后使用'+ bezierPathWithCGPath:'返回一个'UIBezierPath'对象。 – MaxGabriel

+0

@MaxGabriel真棒。你能否做出答案?这是让我不再学习制作弧的新方法的好方法,这是我的首要目标。 此外,我很想看看我的代码改变了多少,如果我使用'CGMutablePathRef'而不是只是砰的东西到CGContext上。 –