我想创建一个简单的绘图工具。目的是绘制一条跟随iPhone及其加速度计的线。 iPad,因此如果用户倾斜设备,则会沿设备移动的方向绘制一条线。
我可以注册加速线和绘图线。我的问题是,只要画一条线,旧的就会消失。一种可能的解决方案是保存到已绘制的点,然后重新绘制所有内容,但我认为有更好的解决方案?
感谢所有帮助!
我的drawRect目前是这样的:
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 20.0);
CGContextSetStrokeColorWithColor(context, [UIColor yellowColor].CGColor);
CGContextMoveToPoint(context, fromPoint.x, fromPoint.y);
CGContextAddLineToPoint(context, toPoint.x, toPoint.y);
CGContextStrokePath(context);
}
另一种方法负责刷新。也可以从uiviewcontroller以一定的间隔调用此方法。现在它在设备移动的方向上显示了“跟踪”(或我应该称之为“跟踪”)。不完全是我想要的:
- (void)drawNewLine:(CGPoint)to {
// calculate trail behind current point
float pointDifferenceX = ((toPoint.x - to.x) * 9);
float pointDifferenceY = ((toPoint.y - to.y) * 9);
fromPoint = CGPointMake(toPoint.x + pointDifferenceX, toPoint.y + pointDifferenceY);
toPoint = to;
[self setNeedsDisplay];
}
答案 0 :(得分:3)
我可以想到两个选择:
保存所有点并在需要刷新屏幕时重新绘制线条(如您所述)
将线条绘制到离屏像素图中并从那里刷新屏幕
在任何一种情况下,尊重好莱坞原则:不要打电话,你会被召唤。这意味着不要只是绘制到屏幕,而是等到drawRect:
调用UIView
。 (您可以通过调用setNeedsDisplay来触发它。)