gpt4 book ai didi

ios - 如何绘制波形?

转载 作者:行者123 更新时间:2023-12-01 16:29:06 27 4
gpt4 key购买 nike

我正在使用Superpowered SDK播放声音。
它具有一个返回未签名char **的函数,称为peakWaveForm。
我编写了一个自定义uiview并尝试绘制此值,但我的 View 外观不好。我的问题是,绘制波形的值应该是多少?
以及什么样的变量。数组?。波形的正常大小应该是多少? SDK返回一个未签名的字符**,我该如何进行?

- (void)drawRect:(CGRect)updateRect
{
unsigned i, maxIndex;

maxIndex = floor(CGRectGetMaxX(updateRect));
i = floor(CGRectGetMinX(updateRect));
float firstPoint = (float)mPeakWaveForm[0][i];

UIBezierPath *path = [UIBezierPath bezierPath];
path.lineWidth = 2;
[[UIColor blackColor] setFill];
[path moveToPoint:CGPointMake(i,firstPoint)];

for(i; i <= maxIndex; i++)
{
float nextPoint = (float)mPeakWaveForm[0][i];
[path addLineToPoint:CGPointMake(i, nextPoint)];
}
[path fill];
}

最佳答案

我和你处在相同的境地,并以这种方式解决了。
首先,您仅在1维数据数组中获得的波形,我们希望2d在两个轴上都具有它。
所以我要做的是创建一个数组点,而不是直接绘制路径,然后一次又一次地绘制路径,如下所示围绕着x轴:

    var points = Array<CGPoint>()
for(i; i <= maxIndex; i++)
{
float nextPoint = (float)mPeakWaveForm[0][i];
points.append(CGPoint(x: CGFloat(i), y: CGFloat(nextPoint)))
}
//Move to the center of the view
var xf = CGAffineTransformIdentity;
xf = CGAffineTransformTranslate(xf, 0, halfHeight)
//Scale it as needed (you can avoid it)
xf = CGAffineTransformScale(xf, xscale, yscale)

let path = CGPathCreateMutable()
//Draw the lines
CGPathAddLines(path, &xf, points, points.count)

//Mirror the drawing and draw them again
xf = CGAffineTransformScale(xf, 1.0, -1.0);
CGPathAddLines(path, &xf, points, points.count);

CGPathCloseSubpath(path)
//Draw the path
let ctx = UIGraphicsGetCurrentContext();
CGContextAddPath(ctx, path);
CGContextSetStrokeColorWithColor(ctx,UIColor.whiteColor().CGColor);
CGContextFillPath(ctx);

抱歉,代码很快,但是功能与Objective-C相同

关于ios - 如何绘制波形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33135594/

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