【发布时间】:2014-03-24 19:23:54
【问题描述】:
对于一个 iOS 项目,我试图在实时交互的 UIImageView 上绘制一条折线。也就是说,用户可以在线上的任意点触摸一个手柄并拖动它来重塑它。
我可以在 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 是 UIScrollView 中的高分辨率图像(取自 iPhone 相机)。我猜想调用setNeedsDisplay 来获得这么大的视图会占用大量资源?
【问题讨论】:
标签: ios cocoa-touch opengl-es uikit core-graphics