我想在iPhone上繪製一個圖形,但我希望圖形更新得很快,所以我真正想要繪製的圖形是UIImageView
,然後當繪製方法重複,清除舊圖形並重繪它。Draw,Clear然後重繪問題Quartz
這裏是我的代碼:
- (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();
}
此代碼的工作正是我想要它時調用一次。它顯示以下曲線:
但是,當我添加一個計時器到redraw
奇怪的東西開始發生。我得到的曲線如上圖所示,當應用程序啓動時,它會立即變成這條曲線(相同的曲線,只是看起來更多地沿x軸延伸,並且在y軸上更高(技術上更低):
和:
- (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);
}
我想知道''我自己:我'正在做什麼以及'y'來自哪裏。 – barley
查看編輯問題... –
對不起,但也許我錯過了一些東西。 ' - (void)y:(float)x'是什麼意思?它沒有返回一個變量,也沒有通過引用傳遞。 'y'是一個實例變量嗎?如果是這樣,我可能會建議你將它改爲'_y'或'y_'來表示它是一個iVar。你在其他地方使用'y' iVar嗎?我只在上面的代碼中看到它使用過一次,在這種情況下,將它作爲iVar是沒有意義的。只需讓'[self y:i]'返回一個'float'值。 –