被叫但不是画画

时间:2011-05-01 23:36:03

标签: objective-c cocoa macos

我在drawRect:方法中有一些代码从数组中绘制一系列圆圈。我可以验证这些点在内存中保留足够长的时间并达到应该绘制的点。但是,似乎fill的{​​{1}}方法并未绘制圆圈。

这是我的NSBezierPath

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:

虽然我能够验证这些方法是在正确的时间(或者看起来如此)被调用的,但是在初始drawRect:之后不会进行绘制

旁注: 我的目标是实际绘制一个点并在其周围出现一个环,放大并淡出。与iOS上的GPS当前位置指示器非常相似,位于地图应用程序中。任何有关这方面的见解也将受到赞赏。

2 个答案:

答案 0 :(得分:0)

检查您的观点,确保没有倒置的矩形,并确保您的X / Y坐标符合预期。确保您的锚点和坐标正确相对。

使用Apple开发人员工具附带的Quartz Debug工具可能会对您有所帮助。它位于/ Developer / Applications / Graphics Tools /文件夹中。启动此工具后,转到“工具”菜单并启用“Flash屏幕更新”。这将让您了解何时重新绘制内容。

希望有所帮助。

答案 1 :(得分:0)

我已经复制粘贴了您的视图代码。我把它放在一个app委托进行测试。 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];
}