對於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
來獲得這個尺寸需要很多資源?
我試圖玩弄這一點,似乎問題是相反的。也就是說,在一個短的平移手勢中,手勢識別器可以在一秒鐘內調用'setNeedsDisplay'超過40次。也許這是由於UIView的大小造成的,但這似乎是導致內存超過300MB的原因。任何想法@ Jef的其他想法? – Jaimeson