1
爲什麼這段代碼沒有正確執行。我試過setNeedsDisplay和setNeedsLayout,但是這段代碼似乎沒有被執行。即使它執行了,它也會在它不應該執行的時候執行,並且它執行錯誤,這意味着它會在錯誤的位置和隨機的長度中繪製該行。 - (無效)drawNW {如何在正確的時間和地點繪製這條線
NSLog(@"%f",x1);
NSLog(@"%f",y1);
CGContextSetStrokeColorWithColor(c, [UIColor blueColor].CGColor);
CGContextSetLineWidth(c, 10.0);
CGContextMoveToPoint(c, x1, y1);
CGContextAddLineToPoint(c, -(sqrtf(2)/2)*length + x1, ((sqrtf(2)/2)*length + y1));
CGContextStrokePath(c);
length = line.bounds.size.height;
}
長度,X1和Y1被浮子恆定在0.1秒的間隔由一個的NSTimer改變:
NWTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(startMoving) userInfo:nil repeats:YES];
定時器呼叫這個調用drawNW的代碼:
x1 = x1-2.5;
y1 = y1-2.5;
length= length+5;
[self drawNW];
我試過這個,它可以工作,但每次我調用setNeedsDisplay時,它會刪除它剛剛繪製的線條,並用新點(x1,y1)處的線條替換它。無論如何要將這一行存儲在數組或其他東西中。如果沒有,那麼非常感謝 – 2013-03-24 15:06:38
在應用程序啓動時創建一個與您的視圖大小相同的位圖。當每個定時器事件觸發時,更改x1等的值並在該位圖上繪製新行,然後調用[self setNeedsDisplay]。在你的'drawRect'裏面,你只需將這個位圖複製到屏幕上即可。有關代碼,請參見[此答案](http://stackoverflow.com/a/1962986/14606)。 – MusiGenesis 2013-03-24 23:23:00
您也可以將每條新行的座標存儲在某種類型的集合中(如您所建議的),然後在每次'drawRect'調用期間重新繪製整個(擴展)集合,但效率不高並且可能在一會兒。 – MusiGenesis 2013-03-24 23:25:51