2011-07-23 5 views
3

あなたの指を入れてどこに私はこれは私が持っているもので、円を作成し、簡単な描画アプリケーションを作成しようとしています:Core Graphicsでサークルを描く - なぜこれは機能しませんか?

@synthesize touchPos; 
@synthesize coords; 


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    touchPos = [touch locationInView:self.view]; 
    coords.text = [NSString stringWithFormat:@"%3.0f, %3.0f", touchPos.x, touchPos.y]; 
    [self setNeedsDisplay]; 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [self touchesBegan:touches withEvent:event]; 
} 

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef contextRef = UIGraphicsGetCurrentContext(); 
    CGContextSetLineWidth(contextRef, 2.0); 
    CGContextSetRGBFillColor(contextRef, 0, 0, 1.0, 1.0); 
    CGContextSetRGBStrokeColor(contextRef, 0, 0, 1.0, 1.0); 
    CGRect circlePoint = (CGRectMake(touchPos.x, touchPos.y, 10.0, 10.0)); 

    CGContextFillEllipseInRect(contextRef, circlePoint); 
} 

私はエラーや警告を取得しない、それだけで描画されません何でもまた、テキストボックスは私が触っている場所の座標を表示するので、問題ではないことが分かります。

+0

どのようなクラスですか? UIViewまたはUIViewController? – magma

+0

それは変です。 drawRect:これはUIViewの実装であるという証拠ですが、ビューには.viewプロパティがありません。 (touchPos = [touch locationInView:self.view];) –

+0

あなたのdrawRectが呼び出されるかどうかを確認します。 –

答えて

3

このコードは、現在のビュー階層の一部であるUIViewサブクラスに存在する必要があります。

+0

サブクラスを追加しましたが、drawRectが呼び出されていないため、何も描画されません。 – kyle

+1

ビューサブクラスのインスタンスを作成して現在のビュー階層に追加しましたか? (alloc、initWithXYZ、addSubViewなど)そのビューのタッチハンドラーが呼び出されていますか? – hotpaw2

1

addSubviewを呼び出してこれをメインビューに追加しましたか? このビューではsetNeedsDisplayを呼び出しましたか?

this SO questionも参照してください。

フレームが正しく、親ビューの境界内にあることを確認してください。

0

問題は、-drawRect:が呼び出されていないということです。そうです、そうです、このコードをUIViewControllerに記述しているからです。 UIViewのサブクラスを作成し、この描画とイベントの処理をすべてそれに移す必要があります。 UIViewのサブクラスでは、selfと言う必要があるため、変更する必要があるのはself.viewです。カスタムUIViewサブクラスを取得したら、インターフェイスビルダーを使用してUIViewControllerのクラスをカスタムクラスに設定できます。