gpt4 book ai didi

iphone - 绘制,清除然后重绘问题 Quartz

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:47:42 25 4
gpt4 key购买 nike

我正在尝试在 iPhone 上绘制图形,但我希望图形能够快速更新,所以我真正想做的是将图形绘制到 UIImageView,然后在绘制时重复方法,清除旧绘图并重新绘制。

这是我的代码:

- (void)redraw {
canvas.image = nil;

UIGraphicsBeginImageContext(self.view.frame.size);
[canvas.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0);
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0, 0.0, 0.0, 1.0);
CGContextBeginPath(UIGraphicsGetCurrentContext());
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), 0, canvas.frame.size.height/2);
for (float i=0; i<500; i+=0.01) {
[self y:i];
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), ((i*200)-200), (y*200)+canvas.frame.size.height/2);
}
CGContextStrokePath(UIGraphicsGetCurrentContext());
canvas.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}

此代码在调用一次时完全符合我的要求。它显示以下曲线: Working well

但是当我为 redraw 添加一个计时器时,奇怪的事情开始发生。当应用程序启动时,我得到了如上图所示的曲线,但它立即变成了这条曲线(相同的曲线,只是看起来沿 x 轴拉伸(stretch)得更多,而在 y 轴上更高(技术上更低): enter image description here

和:

- (void)y:(float)x {
y = sin(x - 1)*pow((x - 1), 0.5)*cos(2*(x - 1))*sin(0.5*(x - 1))*cos(x - 1)*sin(2*(x - 1))*pow(cos(x-1), -1);
}

最佳答案

我认为问题在于您在将图形上下文设置为 self.view.frame.size 时在 canvas.frame 上进行计算。现在也许两者都设置为完全相同的大小(我无从知晓),但如果出于某种原因,这些大小不同,则可能是您例程的图形结果中出现“拉伸(stretch)”的原因。

另外,你有一些奇怪的代码。在方法的开头调用 canvas.image = nil;。但稍后(向下 3 行)您调用 [canvas.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; .如果 canvas.image 刚刚设置为 nil,则 drawInRect 没有图像(如果您想替换 canvas 的图像)。

关于iphone - 绘制,清除然后重绘问题 Quartz,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13128021/

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