2011-12-18 2 views
2

Quartz 2Dを初めて使用しました。私は三角形を描画して回転しようとしています。 Quartz 2Dを使った私の限られたバックグラウンドで、私はAppleから見つけた/グーグルで私はCGContextRotateCTMの機能を使うことができます。私の問題は、私がそれを描いたテキスト全体を回転させたときのことです。私はCGContextSaveGstateを使って試してみました。そして回転をした後にそれを復元しましたが、didntの仕事をしました。私のアプローチが正しいかどうか疑問に思っていますか?それを達成するために私が使用できるより良い方法がありますか?Quartz 2D描画プリミティブローテーション

CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSaveGState(context); 
    for (key in data) 
    { 
    // get point 
    Data *tmpdata =[data objectForKey:key] ; 
    point=[data point ] 
    //setup and draw the 
    CGContextBeginPath(context); 
    CGContextSetRGBFillColor(context, [data fillcolor].r, 
     [data fillcolor].g, [tmpACdata fillcolor].b, 1); 
    CGContextSetLineWidth(context, 2.0 

    // Draw Triangle   
    CGContextMoveToPoint(context,point.x,point.y); 
    CGContextAddLineToPoint(context, point.x+8, point.y+8); 
    CGContextAddLineToPoint(context, point.x-8, point.y+8); 

    CGContextClosePath(context); 
    CGContextDrawPath(context, kCGPathFill); 

    CGContextRotateCTM(context, [data heading]* M_PI/180); 

    CGContextClosePath(context); 
    CGContextDrawPath(context, kCGPathFill); 
    // Draw Text 
    ............... 
    } 
    CGContextRestoreGState(context); 

答えて

2

これを試してみてください:

CGContextSaveGState(context); 
CGContextRotateCTM(context, [data heading]* M_PI/180); 
// draw triangle 
CGContextRestoreGState(context); 

だけにして

// Draw Text 
+0

私はロジックを試しても動作しませんでした。これで、テキストは表示されますが、三角形は表示されません。 – user519274

+0

座標に問題がある場合は、該当する行があるコードに改行を入れます。あるいは、 'std :: cout << yourVariable <<」をスローしてください。 – Adrian

0
CGContextRotateCTM(context, [data heading]* M_PI/180); 

CGContextClosePath(context); 
CGContextDrawPath(context, kCGPathFill); 

CGContextRotateCTM(context, -[data heading]* M_PI/180); 

// Draw Text 
+0

本当にありがとうございます。そのソーシャルは働いています。私は適切な回転で描画された三角形を取得しているが、まったく適切な位置にはない。一方のテキストは正しい位置に描かれます。 – user519274

+0

お手数ですが、お早めにお返事できないのは残念です!回転は左上から、シーンの中心に変換してから回転し、次に平行移動してからdraw1します – Nico

3

大丈夫、十分に速く決勝戦のカップルを終えたバック再生ではないため申し訳ありません。私はあなたが指摘したことを正確に行い、私はそれを働かせました。ここにコードは誰か他人を助けるかもしれないかもしれない

CGContextSaveGState(context); 
CGContextBeginPath(context);   
CGContextTranslateCTM(context, point.x, point.y); 
//CGContextScaleCTM(context, 1.0, -1.0); that didnt work   
CGContextRotateCTM(context, [data heading]* M_PI/180) ; 
CGContextSetRGBFillColor(context, [data fillcolor].r, [data fillcolor].g, [data fillcolor].b, 1); 

//Draw Triangle 
CGContextMoveToPoint(context,0,0); 
CGContextAddLineToPoint(context, 10, 10); 
CGContextAddLineToPoint(context, 0, 6); 
CGContextAddLineToPoint(context, -10,10);    
CGContextRotateCTM(context,(-1.0)* [tmpACdata heading]* M_PI/180); 
CGContextClosePath(context); 
CGContextDrawPath(context, kCGPathFill);' 
CGContextRestoreGState(context); 

助けてくれてありがとうございました。あなたは実用的なクォーツ2Dの本のための提案がありますか? アップル・ドックはちょっと役に立ちましたが、コンセプトを理解するのにはそれほど偉大ではありませんでした。

関連する問題