如何绘制没有旧线条消失的新线条?

时间:2011-04-17 17:39:37

标签: iphone objective-c xcode

我想创建一个简单的绘图工具。目的是绘制一条跟随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];
}

1 个答案:

答案 0 :(得分:3)

我可以想到两个选择:

  1. 保存所有点并在需要刷新屏幕时重新绘制线条(如您所述)

  2. 将线条绘制到离屏像素图中并从那里刷新屏幕

  3. 在任何一种情况下,尊重好莱坞原则:不要打电话,你会被召唤。这意味着不要只是绘制到屏幕,而是等到drawRect:调用UIView。 (您可以通过调用setNeedsDisplay来触发它。)