2011-05-01 4 views
0

배열에서 일련의 원을 그리는 drawRect: 메서드에 일부 코드가 있습니다. 나는 그 포인트들이 충분히 오래 메모리에 머물러 있는지, 그리고 그 포인트들이 그려 져야 하는지를 확인할 수있다. 그러나 NSBezierPathfill 메서드가 원을 그리지 않는 것처럼 보입니다. 여기 이 호출되었지만 드로잉되지 않습니다.

은 내 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]; 
    } 
} 

나는 배열에 포인트를 추가 할 다른 방법 drawDotAtPoint:

- (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]; 
} 

그리고 나는이 방법이 올바른에서 호출되어 있는지 확인 할 수 있는데도 시간 (또는 그렇게 보입니다) 초기 drawRect 후 그림이 없습니다.

사이드 노트 : 내 목표는 실제로 한 점을 그리고 그 주위에 링이 나타나 확대하고 사라집니다. 지도 앱에서 iOS의 GPS 현재 위치 표시기와 매우 유사합니다. 그것에 대한 통찰력은 또한 평가 될 것입니다.

+0

이 코드는 완벽하게 작동합니다.보기를 어떻게 작성하고 있습니까? –

+0

윈도우의 contentView로 설정하고 있습니다 : [self setContentView : [[VisualEventView alloc] initWithFrame : [[self contentView] frame]]]]; – TheCrypticAce

+0

아직도 나를 위해 일해 ... for 루프의 내부에서'[self canDraw]'는 무엇을 말합니까? 또한, 두 가지 메모 : 나는'clearColor'가 당신이 생각하는대로하지 않는다고 생각합니다. 투명합니다. (''NSEraseRect') (http://developer.apple.com/library/mac/documentation/Cocoa /Reference/ApplicationKit/Miscellaneous/AppKit_Functions/Reference/reference.html#//apple_ref/c/func/NSEraseRect)); 스타일/컨벤션의 문제로, 당신의 방법은 실제로 드로잉을하지 않으면 'draw ...'로 시작해서는 안됩니다. –

답변

0

포인트를 확인하고 역 직사각형이없고 X/Y 좌표가 예상 한 값인지 확인하십시오. 고정 점과 좌표가 올바르게 상대적인지 확인하십시오.

사과 개발자 도구와 함께 제공되는 Quartz Debug라는 도구를 사용하면 약간의 도움이 될 수 있습니다./Developer/Applications/Graphics Tools/폴더에 있습니다. 이 도구를 시작한 후 "도구"메뉴로 이동하여 "플래시 화면 업데이트"를 설정하십시오. 이렇게하면 언제 다시 그려지는지 알 수 있습니다.

일부 도움이 되길 바랍니다.

+1

FWIW, 0,0은 Mac의 왼쪽 하단에 있습니다 (부모의 좌표 공간이 뒤집히는 경우 제외). iOS의 왼쪽 상단. – Wevah

+0

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

+0

예 - CoreAnimation (0,0)이 왼쪽 상단에없는 한 왼쪽 하단에 있습니다.AppKit (0,0)은 [myView isFlipped]가 아니라면 왼쪽 하단에 있습니다. – nielsbot

0

보기 코드를 복사하여 붙여 넣었습니다. 나는 테스트를 위해 이것을 애플 리케이션 델리게이트에 붙였다. BadView이 여기에있는 사용자 정의보기입니다 (반사가 없음 - 잘못 되었기 때문에 "Bad"가 발생 함) :)) 창은 모두 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를 만들고 'applicationDidFinishLaunching :'에 표시하십시오. . 나는 그것이'drawRect :'를 호출하고 점을 추가하고'drawRect :'가 그것들을 받지만 여전히 그려지지 않았다는 것을 확인한다. XCode/llvm 컴파일 프로세스의 버그 일 수 있습니다. (나는 Xcode 4를 실행 중이다.) – TheCrypticAce

+0

그래, 나는 혼란 스럽다. xib에 윈도우를 생성하는 것에주의하십시오. 도움이되지 못해 죄송합니다 ... –

관련 문제