ちょっと必要だったので作りました。

ss

CoreGraphicsを使って、指定したCGRectの中に、指定した太さの×印(Cross Sign)を描画するためのPathを生成します。

   1  void PDPathAddCrossSign(CGMutablePathRef path, CGRect rect, CGFloat thickness)
   2  {
   3    CGFloat diff = rect.size.width - rect.size.height;
   4    rect = CGRectDeflateRect(rect, MAX(0, diff/2), MAX(0, -diff/2));
   5    CGFloat radius = rect.size.width/2;
   6    CGFloat d = sqrt(2)*thickness/2;
   7    CGFloat cx = CGRectGetMidX(rect), cy = CGRectGetMidY(rect);
   8    CGAffineTransform transform = CGAffineTransformMakeTranslation(cx, cy);
   9    CGPathMoveToPoint(path, &transform, d, 0);
  10    for(int i = 0; i < 4; ++i){
  11      CGPathAddLineToPoint(path, &transform, radius, radius - d);
  12      CGPathAddLineToPoint(path, &transform, radius - d, radius);
  13      CGPathAddLineToPoint(path, &transform, 0, d);
  14      transform = CGAffineTransformRotate(transform, M_PI/2.0f);
  15    }
  16    CGPathCloseSubpath(path);
  17  }

中で呼び出してるCGRectDeflateRectは以下のようなものです。

   1  CGRect CGRectInflateRect(CGRect rect, CGFloat width, CGFloat height)
   2  {
   3    rect.origin.x -= width;
   4    rect.origin.y -= height;
   5    rect.size.width += width*2;
   6    rect.size.height += height*2;
   7    return rect;
   8  }
   9  
  10  CGRect CGRectDeflateRect(CGRect rect, CGFloat width, CGFloat height)
  11  {
  12    return CGRectInflateRect(rect, -width, -height);
  13  }

これを使う事で、任意の大きさ、太さ、色で×印を描画できます。

posted by Png genki on Wed 4 Mar 2009 at 00:12

Comments:

or Preview
Social Bookmarks
  • Delicious
  • B_entry1339
  • Clip_16_12_w
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ