使 NSBezierPath 保持相对于 windowResize 上的 NSView

Posted

技术标签:

【中文标题】使 NSBezierPath 保持相对于 windowResize 上的 NSView【英文标题】:Make NSBezierPath to stay relative to the NSView on windowResize 【发布时间】:2013-04-29 17:57:40 【问题描述】:

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

例子

初始绘图

窗口调整大小

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

感谢任何帮助!

【问题讨论】:

我正在绘制这些形状...它们不是在界面构建器中构建的 是的,我知道,你可以通过代码使用自动布局!!! 任何例子?!...我显然不知道你在说什么:) 找到this和this 谢谢,我去看看! 【参考方案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];

【讨论】:

是的...这就是我在考虑这个问题的原因,我必须编写一些算法来重新计算和重新绘制形状...谢谢!

以上是关于使 NSBezierPath 保持相对于 windowResize 上的 NSView的主要内容,如果未能解决你的问题,请参考以下文章

如何使固定元素保持相对于当前顶部滚动位置?

如何使字体大小相对于父 div?

在跨表行中添加图像以相对于其他非跨行行保持居中

使 UIButton 在屏幕上保持静止

NSBezierPath 的 strokeRect: 是不是总是绘制透明矩形? (可可 OSX)

如何擦除用 NSBezierPath 绘制的东西?