タッチ位置の周りを回る矩形

前回のタッチ位置に矩形を表示するサンプル(iOS)の続き。タッチ位置の周りを回る矩形を描画するサンプルです。時計回りに回転する矩形と、反時計回りに回る矩形の2つを表示しています。

f:id:noriok:20120405235658p:plain

前回のプログラムのdrawRect:のみの修正です。

- (void)drawRect:(CGRect)rect
{
    const int size = 30;
    CGContextRef c = UIGraphicsGetCurrentContext();

    CGContextSaveGState(c); // graphics state保存
    
    CGContextTranslateCTM(c, _point.x, _point.y);
    CGContextRotateCTM(c, _angle*M_PI/180.0);
    CGContextTranslateCTM(c, -_point.x, -_point.y);
    
    CGContextSetFillColorWithColor(c, [UIColor blueColor].CGColor);
    CGRect r = CGRectMake(_point.x - (size/2.0), _point.y - (size/2.0), size, size);    
    CGContextFillRect(c, r);
    
    CGContextSetFillColorWithColor(c, [UIColor redColor].CGColor);
    CGRect r2 = CGRectMake(_point.x + 30, _point.y - (size/2.0), size, size);
    CGContextFillRect(c, r2);
    
    CGContextRestoreGState(c); // graphics stateリストア

    CGContextTranslateCTM(c, _point.x, _point.y);
    CGContextRotateCTM(c, -_angle*M_PI/180.0);
    CGContextTranslateCTM(c, -_point.x, -_point.y);
    
    CGContextSetFillColorWithColor(c, [UIColor greenColor].CGColor);
    CGRect r3 = CGRectMake(_point.x + 70, _point.y - (size/2.0), size, size);
    CGContextFillRect(c, r3);
}