2016-11-28 1 views
0

Можно ли компенсировать точки UITouch? Я использую методы касаний, показанные ниже. Я хочу компенсировать точки касания некоторым числом, чтобы пользователь увидел, где начнется и начнется прикосновение. Если я пытаюсь рисовать в строках, я хочу видеть выше моего кончика пальца, как и ручками и карандашами. Любая помощь приветствуется.Можно ли компенсировать точки касания в Objective C?

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 


    // add the first touch 
    UITouch *touch = [touches anyObject]; 

    previousPoint = [touch previousLocationInView:self]; 
    currentPoint = [touch locationInView:self]; 

    // init the bezier path 
    self.currentTool = [self toolWithCurrentSettings]; 
    self.currentTool.lineWidth = self.lineWidth; 
    self.currentTool.lineColor = self.lineColor; 
    self.currentTool.lineAlpha = self.lineAlpha; 

    [self.currentTool setInitialPoint:currentPoint]; 
... 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 

    // save all the touches in the path 
    UITouch *touch = [touches anyObject]; 

    previousPoint2 = previousPoint1; 
    previousPoint1 = [touch previousLocationInView:self]; 
    currentPoint = [touch locationInView:self]; 

    //currentPoint.y += 40; 
    CGRect bounds = [(DrawingPenTool*)self.currentTool addPathPreviousPoint:previousPoint2 withPreviousPoint:previousPoint1 withCurrentPoint:currentPoint]; 

     CGRect drawBox = bounds; 
     drawBox.origin.x -= self.lineWidth * 2.0; 
     drawBox.origin.y -= self.lineWidth * 2.0; 
     drawBox.size.width += self.lineWidth * 4.0; 
     drawBox.size.height += self.lineWidth * 4.0; 

     [self setNeedsDisplayInRect:drawBox];  
     [self.currentTool moveFromPoint:previousPoint1 toPoint:currentPoint]; 
     [self setNeedsDisplay]; 
    } 

} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 

    [self touchesMoved:touches withEvent:event]; 

     CGPoint point = [[touches anyObject] locationInView:self]; 
     [self.currentTool setInitialPoint:point]; 


     } 

} 

ответ

2

Вы можете использовать UIEvent predictedTouches и UITouch estimatedProperties, чтобы узнать, где следующий сенсорный, вероятно, будет. Таким образом, вы можете продолжать рисовать «впереди» пользователя. Для этого и предназначена эта функция.

+2

Просмотрите видео с WWDC 2015 или 2016, чтобы узнать больше об этом. Приложения для рисования - это целевая аудитория для этих видео. – matt

+0

Спасибо @matt. Выключить для просмотра видео или 2 –

+0

Могу ли я использовать valuProperties, даже если я не использую Apple Pencil? –

Смежные вопросы