gpt4 book ai didi

macos - setNeedsDisplay 不够快(正确的方法是什么?)

转载 作者:行者123 更新时间:2023-12-03 17:03:15 25 4
gpt4 key购买 nike

我正在尝试制作一个非常简单的绘画应用程序(Cocoa)。在我的自定义 View 中,我有我的drawRect:方法,它在光标位置创建一个矩形:

- (void)drawRect:(NSRect)rect{
NSPoint point = [self.window mouseLocationOutsideOfEventStream];
NSRectFill(NSMakeRect(point.x, point.y, 5, 5)); }

我还实现了 mouseDown: 和 mouseDragged:,这两个函数都告诉 View 重绘绘制矩形:将填充的区域。

     NSPoint point = [self.window mouseLocationOutsideOfEventStream];
[self setNeedsDisplayInRect:NSMakeRect(point.x,point.y,5,5)];

但是,如果我以中等速度移动光标,绘制的对象之间就会出现间隙。另外,如果在旧矩形上绘制新矩形,则会显示白色边框。因此我得出的结论是我一定使用了错误的工具。当鼠标在 View 上移动时,如何实时显示矩形?

最佳答案

如果我理解正确,您必须指的是当您移动鼠标足够快时,彼此之间有一定距离绘制的矩形,即不是连续每个像素。

嗯,我猜这是标准行为,因为鼠标指针实际上沿着屏幕上的移动路径跳过了一些位置。换句话说,鼠标指针快速移动时并不会穿过屏幕上的每个像素。

(编辑:原因很明显:鼠标具有固定的跟踪频率;因此,当鼠标突然快速移动时,跟踪点会变得更粗糙)

恐怕对此无能为力,您必须自己沿着指针路径创建矩形的插值。存储先前的鼠标位置并绘制一个在旧位置和新位置之间插值的形状。就像这样:

enter image description here

关于macos - setNeedsDisplay 不够快(正确的方法是什么?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21515281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com