2011-05-01 21 views
0

drawRect:メソッドで配列から一連の円を描くコードがあります。私は、ポイントがメモリに十分長くとどまって、描画されるべきポイントに達することを確認することができます。しかし、NSBezierPathfillメソッドが円を描いていないかのようです。ここでが呼び出されていますが、描画されていません

私は配列

- (void)drawDotAtPoint:(NSPoint)aPoint 
{ 
    NSLog(@"drawDotAtPoint:(%f, %f)", aPoint.x, aPoint.y); 
    [arrayOfPoints addObject:[NSValue valueWithPoint:aPoint]]; 

    // I've also tried using [self superview] instead of just self   
    [self setNeedsDisplay: YES]; 
} 

にポイントを追加し、私はこれらのメソッドが正しい時に呼び出されていることを確認することができる午前中に別の方法drawDotAtPoint:を持っている私のdrawRect:

- (void)drawRect:(NSRect)dirtyRect 
{ 
    NSPoint aPoint; 
    NSRect aRect = NSMakeRect(0, 0, 6, 6); 

    // Erase the rectangle 
    [[NSColor clearColor] set]; 
    NSRectFill([self bounds]); 

    // Draw the dots 
    [[NSColor colorWithCalibratedRed:(77.0/255.0) green:(11.0/255.0) blue:(11.0/255.0) alpha:1.0] set]; 

    for(NSValue *aValuePoint in arrayOfPoints) { 
     aPoint = [aValuePoint pointValue]; 
     aRect.origin.y = aPoint.y - aRect.size.height/2.0; 
     aRect.origin.x = aPoint.x - aRect.size.width/2.0; 

     // The code does get to this point, it does not draw however... 
     [[NSBezierPath bezierPathWithOvalInRect:aRect] fill]; 
    } 
} 

です最初のdrawRectの後に描画がない(またはそう思われる)。

サイドノート: 私の目標は、実際にはポイントを描き、その周りにリングが表示され、拡大してフェードアウトします。 Mapsアプリでは、iOSのGPS現在地表示と似ています。それについての洞察もまた評価されるだろう。

+0

このコードは私にとって完璧に機能します...あなたのビューをどのように作成していますか? –

+0

私はそれをウィンドウのcontentViewとして設定しています:[self setContentView:[[VisualEventView alloc] initWithFrame:[[self contentView] frame]]]; – TheCrypticAce

+0

まだ私のために働いています... '[self canDraw]'はforループの中で何を言いますか?また、2つのメモ:私は 'clearColor'とは思っていないと思います。透明です(' 'NSEraseRect')(http://developer.apple.com/library/mac/documentation/Cocoa /リファレンス/アプリケーションキット/その他/アプリケーション機能/リファレンス/リファレンス.html#//アプリケーション/リファレンス/スタイル/コンベンションの問題として、あなたのメソッドは実際に描画をしなければ 'draw ...'で始めるべきではありません。 –

答えて

0

逆の四角形がないことと、X/Y座標が期待どおりであることを確認してください。アンカーポイントと座標が正しく相対的であることを確認してください。

アップルのデベロッパーツールに付属のQuartz Debugというツールを使用すると、ちょっとした手助けをすることができます。/Developer/Applications/Graphics Tools /フォルダにあります。このツールを起動した後、「ツール」メニューに移動し、「Flash Screen Updates」をオンにします。これにより、いつ物事が再描画されるかどうかがわかります。

いくつか役に立っています。

+1

FWIW、0,0はMacの左下にあります(親の座標空間が反転していない場合を除く).iOSでは左上に表示されます。 – Wevah

+0

(0,0)は '[myView isFlipped]' –

+0

がyesの場合を除き、左下になります.CoreAnimation(0,0)は左上です。[myView isFlipped]が指定されていない限り、AppKit(0,0)は左下にあります。 – nielsbot

0

ビューコードをコピーして貼り付けました。私はテストのためのアプリケーションデリゲートにこれを貼り付けました。 BadViewはここにカスタムビューです。あなたには反映されていません - 悪いので悪いです:))ウィンドウはIBで作成され、WebViewも同様にIBの親ウィンドウに配置されます。

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
    // badWindow is an IBOutlet to the overlay window, parentWindow an IBOutlet 
    // to the window with the webview, myWebView an IBOutlet to the webview 
    BadView * myBadView = [[BadView alloc] initWithFrame:[[badWindow contentView] frame]]; 
    // Create some random points for testing 
    [myBadView createArrayOfPoints]; 


    [badWindow setStyleMask:NSBorderlessWindowMask]; 
    [badWindow setOpaque:NO]; 
    [badWindow setAlphaValue:0.9]; // Will still act opaque without this 
    [badWindow setHasShadow:NO]; 
    [badWindow setContentView:myBadView]; 

    [parentWindow addChildWindow:badWindow ordered:NSWindowAbove]; 
    [[myWebView mainFrame] loadRequest:[NSURLRequest requestWithURL: 
           [NSURL URLWithString:@"http://www.apple.com/"]]]; 

    [myBadView release]; 
} 
+0

私はコードを試しましたが、ウィンドウがXIBファイルに作成されるので、コードを 'awakeFromNib'に移動しました。残りの部分は期待どおりに動作しますが、まだ描画していませんので、この問題の原因はわかりません。 – TheCrypticAce

+0

Windows、webviews、およびshow windowsを作成するコードの修正版を 'applicationDidFinishLaunching:' 。私は 'drawRect:'を呼び出してポイントを追加し、 'drawRect:'はそれを受け取るが、まだ描画されていないことを確認する。 XCode/llvmコンパイルプロセスのバグである可能性があります。 (私はXcode 4を実行しています) – TheCrypticAce

+0

ええ、私は困惑しています。 xibにウィンドウを作成していることに注意してください。申し訳ありませんが、私はもっと役に立たなかった... –

関連する問題