使NSBezierPath在windowResize上保持相对于NSView的相对性

时间:2013-04-29 17:57:41

标签: objective-c cocoa nsview nswindow nsbezierpath

在我的程序中,我使用NSViewNSBezierPath内绘制了一些形状。除非我调整窗口大小,否则一切正常并且看起来很棒。

实施例

初步图纸

Initial drawing

窗口调整大小 Window resize

有没有人知道我应该使用什么来防止这个方块被锚定到初始位置,但是让它相对于初始比例重新调整。

感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

如果你在drawRect中进行绘图:那么答案是否定的。每次都需要重建和重新定位路径。您可以做的是以下几点:

- (void) drawRect:(NSRect)dirtyRect
{
    // Assuming that _relPos with x and y having values bewteen 0 and 1.
    // To keep the square in the middle of the view you would set _relPos to
    // CGPointMake(0.5, 0.5).

    CGRect bounds = self.bounds;

    CGRect rect;
    rect.size.width  = 100;
    rect.size.height = 100;
    rect.origin.x = bounds.origin.x + bounds.size.width  * _relPos.x - rect.size.width /2;
    rect.origin.y = bounds.origin.y + bounds.size.height * _relPos.y - rect.size.height/2;

    NSBezierPath *path = [NSBezierPath bezierPathWithRect:rect];
    [[NSColor redColor] set];
    path.lineWidth = 2; 
    [path stroke];
}