1

次のようにして長方形の角を丸めています

ColoredBoxRectを定義し、xとyの最小値、最大値を計算します

CGFloat coloredBoxMargin    =   8;
CGFloat coloredBoxHeight    =   40.0;

coloredBoxRect  =   CGRectMake(coloredBoxMargin,  coloredBoxMargin, self.bounds.size.width-coloredBoxMargin*2, coloredBoxHeight);
CGFloat minx    =   CGRectGetMinX(coloredBoxRect);
CGFloat miny    =   CGRectGetMinY(coloredBoxRect); 
CGFloat midx    =   CGRectGetMidX(coloredBoxRect);     
CGFloat midy    =   CGRectGetMidY(coloredBoxRect); 
CGFloat maxx    =   CGRectGetMaxX(coloredBoxRect); 
CGFloat maxy    =   CGRectGetMaxY(coloredBoxRect);

その後、

CGMutablePathRef path = CGPathCreateMutable();
//Path stars here
CGPathMoveToPoint  (path, NULL, midx, miny);
// Add an arc for the upper right corner 
1.CGPathAddArcToPoint(path, NULL, maxx, miny,  maxx, maxy, radius);
//Add an arc for the lower right corner
2.CGPathAddArcToPoint(path, NULL, maxx, maxy,  minx, maxy, radius);
// Add an arc for the lower left corner 
3.CGPathAddArcToPoint(path, NULL, minx, maxy,  minx, miny, radius);
// Add an arc for the upper left corner 
4.CGPathAddArcToPoint(path, NULL, minx, miny,  maxx, miny, radius);
CGPathCloseSubpath(path);
CGContextAddPath(context, path);

シグニチャCGPathAddArcToPointの1つは、1番目と2番目の線の接線のx座標とy座標です。たとえば、右上隅に円弧を追加するには)maxx + miny + maxx+maxy。そして、これらのパラメータは今私を混乱させています。

絵を描いてみたところ、(maxx、miny)が接線の座標ではないことに気づきました。このペアは、長方形の右上隅の座標です........。

誰かがこの問題について私にアドバイスしますか?すべてのコメントはここで歓迎されます。ありがとう

4

1 に答える 1

1

桁違いに単純なのは、を使用すること[UIBezierPath bezierPathWithRoundedRect:cornerRadius:]です。その後、そこからCGPathを取得できます。

ドキュメントを参照してください。これはおそらく舞台裏で同じことをしますが、なぜ自分でそれをするのですか?

于 2012-06-14T17:10:39.677 に答える