2013-01-12 56 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上。 –