2014-02-23 163 views
0

對於iOS項目,我試圖通過實時交互的UIImageView來渲染多段線。也就是說,用戶可以在線上的任意點觸摸手柄並拖動它來重新塑造它。在UIView中繪製交互式多段線(核心圖形?OpenGL?)

我可以在Core Graphics中畫線,當我嘗試拖動它時,手勢識別器頻繁地調用setNeedsDisplay,導致內存警告和崩潰。 Xcode告訴我Xcode說:「由於內存壓力而終止。」

我畫這樣的線,而是用for循環多個片段。但是,似乎drawRect的內容不是問題。即使我全部評論內容,經常打電話setNeedsDisplay劇烈影響表現。

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
    CGContextSaveGState(ctx); 

    CGContextBeginPath(ctx); 
    CGContextSetStrokeColorWithColor(ctx, [[UIColor blueColor] CGColor]); 
    CGContextSetLineWidth(ctx, 6.0); 
    CGContextSetAlpha(ctx, 1.0); 
    CGContextMoveToPoint(ctx, pointA.x, pointA.y); 
    CGContextAddLineToPoint(ctx, pointB.x, pointB.y); 
    CGContextStrokePath(ctx); 

    CGContextRestoreGState(ctx); 
} 

我環顧四周,我只看到在地圖工具包中這樣做的教程。必須有一些方法來完成這件事。也許Core Graphics不是最好的方法?

編輯:的UIImageView是一個高分辨率圖像(從iPhone相機拍攝的),在一個UIScrollView。我猜想調用setNeedsDisplay來獲得這個尺寸需要很多資源?

回答

0

繪圖代碼很好。在使用手勢識別器時,我認爲會導致您的問題(在我看來)存在固有的延遲和開銷。你應該執行 - (無效)觸摸......事件,而不是(也有他們四)

+0

我試圖玩弄這一點,似乎問題是相反的。也就是說,在一個短的平移手勢中,手勢識別器可以在一秒鐘內調用'setNeedsDisplay'超過40次。也許這是由於UIView的大小造成的,但這似乎是導致內存超過300MB的原因。任何想法@ Jef的其他想法? – Jaimeson