我在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当前位置指示器非常相似,位于地图应用程序中。任何有关这方面的见解也将受到赞赏。
答案 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];
}