Как нарисовать новые линии, не разрушая старые? - PullRequest
1 голос
/ 17 апреля 2011

Я хочу создать простой инструмент для рисования.Цель состоит в том, чтобы нарисовать линию, которая следует за акселерометром 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);
}

За обновление отвечает другой метод.Этот метод также вызывается из контроллера uiview с определенными интервалами.Прямо сейчас он показывает «след» (или как я должен его назвать) в направлении, в котором было перемещено устройство.Не совсем то, что я ищу:

- (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 Ответ

3 голосов
/ 17 апреля 2011

Я могу придумать два варианта:

  1. Либо сохранить все точки и перерисовать линии всякий раз, когда необходимо обновить экран (как вы упомянули)

  2. Нарисуйте линии в пиксельной карте за пределами экрана и оттуда обновите экран

В любом случае соблюдайте принцип Голливуда: не звоните, вас будут звать.Это означает, что нужно не просто рисовать на экране, а ждать, пока не будет вызван drawRect: вашего UIView.(Вы можете вызвать это, вызвав setNeedsDisplay.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...