gpt4 book ai didi

objective-c - 在NSView中绘制波形

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

我需要在 NSView 中绘制波形。 (我将所有样本都放在一个数组中)。绘图必须高效且快速,没有剪切、闪烁等,而且必须平滑。波形将根据歌曲位置“移动”,样本的一些变化(DSP 处理)将实时显示在 NSView 上。

我熟悉在 Canvas 对象上绘制直线、弧线等,并且我开发了执行此类操作的应用程序,但不在 Mac OS X 上...

我想问有没有人可以指导我从哪里开始画画!核心动画、OpenGL、简单的重写绘图方法等。哪个是最佳实践 - 使用 API?

最佳答案

我会保持简单,并创建一个带有使用 Cocoa 绘图的 audioData 属性的 NSView 子类。您可以调用[view setAudioData:waveArray],它又会调用[self setNeedsDisplay:YES]

在您的 drawRect: 方法中,您可以遍历示例并相应地使用 NSRectFill() 。这里samplevalue在0到1之间。

- (void)drawRect:(NSRect)dirtyRect {
[[NSColor blueColor]set];
for (id sample in self.waveArray) {
NSRect drawingRect = NSZeroRect;
drawingRect.origin.x = [self bounds].origin.x;
drawingRect.origin.y = [self bounds].origin.y + ([self.waveArray indexOfObject:sample]/([self.waveArray count] - 1.0));
drawingRect.size.width = [self bounds].size.width/[self.waveArray count];
drawingRect.size.height = [self bounds].size.height * [sample value];
NSRectFill(drawingRect);
}
}

此代码并不准确,您应该确保仅通过在 dirtyRect 内绘制样本来提高其效率。

关于objective-c - 在NSView中绘制波形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7960787/

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