2009-06-09 8 views
7

私がここで間違っていることを理解しようとしています。いくつかのことを試しましたが、私は画面上でその捉えにくい矩形を決して見ません。今、それは私がやりたいことです - 画面上に単一の長方形を描くだけです。初心者のiphoneの質問:四角形を描く。私は間違って何をしていますか?

CGContextSetRGBFillColor()以外のすべてに「無効なコンテキスト」が表示されています。それ以降のコンテキストを取得することは私にとっては間違っているようですが、私は昨夜使用していたサンプルを見て家にいません。

私も他の何かを台無しにしましたか?私は本当に、少なくともこのくらい...

- (id)initWithCoder:(NSCoder *)coder 
{ 
    CGRect myRect; 
    CGPoint myPoint; 
    CGSize mySize; 
    CGContextRef context; 

    if((self = [super initWithCoder:coder])) { 
    NSLog(@"1"); 
    currentColor = [UIColor redColor]; 
    myPoint.x = (CGFloat)100; 
    myPoint.y = (CGFloat)100; 
    mySize.width = (CGFloat)50; 
    mySize.height = (CGFloat)50; 
    NSLog(@"2"); 
    // UIGraphicsPushContext (context); 
    NSLog(@"3"); 
    CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0); 
    context = UIGraphicsGetCurrentContext(); 
    CGContextSetFillColorWithColor(context, currentColor.CGColor); 
    CGContextAddRect(context, myRect); 
    CGContextFillRect(context, myRect); 
    } 

    return self; 

} 

おかげで、

ショーンを今夜を成し遂げるしたいと思います。

答えて

9

initWithCoderにCGコードを入力する必要はありません。そのメッセージはINITIALIZATIONの目的にのみ使用してください。 引き出しという名前のプロジェクトを作成し、ビューベースのテンプレートを皮切り

- (void)drawRect:(CGRect)rect 

あなたはUIViewのサブクラス化をしている場合...

+12

また、drawRectを直接呼び出すのではなく、setNeedsDisplayを呼び出す必要があります。そのため、OSはそれをピックアップして後でビューを再描画します。 – pgb

+0

はい。そのとおり。 –

+0

私はinitWithCoder()を使って描画するべきではありません。しかし、実際には私の質問に答えていますか? CGコードを別の関数に移動して、矩形が描画されるかどうかに違いはありませんか? drawRectを使用する/使用しないと、あなたは今私を混乱させてしまった。 drawRectに私の四角形のすべてのパラメータを入れなければならないと言っていますか?それは正しいとは思われません - もし私が複数の矩形を描きたいのであれば? *ただ*が長方形や円などを描画する単純なアプリケーションがある場合は、それを見てみたいと思います。 Sean。 –

40

はであなたの描画コードを入れてください。プロジェクトにUIViewクラスを追加します。名前はSquareView(.hと.m)です。

DrawerViewController.xibをダブルクリックしてInterface Builderに開きます。 Classポップアップメニューを使用して、アイデンティティインスペクタ(コマンド4)のSquareViewに汎用ビューを変更します。保存してXcodeに戻ります。大規模な、曲がった、空の黄色の矩形や小、緑、透明四角形を描画するためにあなたのSquareView.mファイルの方法:

- (void)drawRect:(CGRect)rect; 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetRGBStrokeColor(context, 1.0, 1.0, 0.0, 1.0); // yellow line 

    CGContextBeginPath(context); 

    CGContextMoveToPoint(context, 50.0, 50.0); //start point 
    CGContextAddLineToPoint(context, 250.0, 100.0); 
    CGContextAddLineToPoint(context, 250.0, 350.0); 
    CGContextAddLineToPoint(context, 50.0, 350.0); // end path 

    CGContextClosePath(context); // close path 

    CGContextSetLineWidth(context, 8.0); // this is set from now on until you explicitly change it 

    CGContextStrokePath(context); // do actual stroking 

    CGContextSetRGBFillColor(context, 0.0, 1.0, 0.0, 0.5); // green color, half transparent 
    CGContextFillRect(context, CGRectMake(20.0, 250.0, 128.0, 128.0)); // a square at the bottom left-hand corner 
} 

あなたがいないのdrawRectでこのコードを入れ

描画が行われるようにこのメソッドを呼び出さなければなりません。あなたのビューコントローラは、プログラムが起動してNIBファイルがアクティブになったときに、少なくとも1回はビューを表示するようにビューに指示します。

関連する問題