Как эффективно обрабатывать UITouches в последовательности мультитач

Я работаю с мультитач во время письма, поэтому в основном я пишу с поддержкой рук, потому что обычно так пишет пользователь, я перешел по этой ссылке Как игнорировать определенные точки UITouch в последовательности мультитач

Все работает нормально с одним касанием, но возникает проблема, когда я пишу рукой, касаясь экрана, т.е. несколько UItouch. Ниже приведен мой код.

Начались касания, я прохожу все касания и нахожу касание с самой высокой позицией y, ниже мой код

Ниже мой код

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch* topmostTouch = self.trackingTouch;
    for (UITouch *touch in touches)
    {
        ctr = 0;

        touchStartPoint1 = [touch locationInView:self];


        if(!topmostTouch || [topmostTouch locationInView:self].y > touchStartPoint1.y)
        {
            topmostTouch = touch;
            pts[0] = touchStartPoint1;
        }
    }   

    self.trackingTouch = topmostTouch;
}

В тач переехал., возьму только self.trackingTouch, который нашел в тач Начал

Мои штрихи Перемещенный код ниже

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{ 
    if(self.trackingTouch== nil)
    {
        return;
    }

    CGPoint p = [self.trackingTouch locationInView:self];
    ctr++;
    pts[ctr] = p;

    if (ctr == 4)
    {
        pts[3] = midPoint(pts[2], pts[4]);

        self.currentPath = [[DrawingPath alloc] init];

        [self.currentPath setPathColor:self.lineColor];
        self.currentPath.pathWidth = [NSString stringWithFormat:@"%f",self.lineWidth];


        [self.currentPath.path moveToPoint:pts[0]];
        [self.currentPath.path addCurveToPoint:pts[3] controlPoint1:pts[1] controlPoint2:pts[2]];

        [self setNeedsDisplay];


        pts[0] = pts[3];
        pts[1] = pts[4];
        ctr = 1;
    }
}

Для справки вот изображение письма с одним касанием и мультитач соответственно.

введите здесь описание изображения

введите здесь описание изображения

Вы можете видеть, что, когда я пишу одним касанием, мой почерк гладкий, кривые плавные, но когда я пишу, когда рука отдыхает, кривые становятся неровными, как вы можете видеть на втором изображении.

Итак, друзья, помогите мне


person Ranjit    schedule 22.02.2014    source источник
comment
Я думаю, что-то не так с отслеживанием касания, и поэтому он с ним возится.   -  person Ranjit    schedule 22.02.2014
comment
Возможно, вы могли бы попытаться определить местоположение покоящейся руки пользователя и отключить касания в этой области? Как только пользователь начнет рисовать, почему бы просто не игнорировать любые касания, не близкие к этому касанию до touchesEnded: и touchesCancelled:?   -  person Aaron Brager    schedule 23.02.2014
comment
Привет, @AaronBrager, спасибо за ответ, как видите, я уже нахожу отслеживание касания и игнорирую остальные касания, основываясь на более высоком значении y, в начале касаний. Вы имеете в виду одно и то же, игнорируя близкие прикосновения до касанийEnded: и touchesCancelled: Пожалуйста, поправьте меня, если я ошибаюсь.   -  person Ranjit    schedule 23.02.2014


Ответы (2)


Предполагая, что код рисования одинаков, разница заключается только в дополнительных накладных расходах на обработку дополнительных касаний. Зацикливание на их обработке, зацикливание на рисовании, все как минимум удваивается. Итак, пока вы обрабатываете прикосновение, а затем рисуете на пальце № 2, здесь, в реальном мире, палец № 1 и т. Д. Все еще движется / все еще движется ... Будьте внимательны. что UIKit может рисовать только в конце каждого runLoop. Я не думаю, что есть какой-то способ обойти это, и, как я уже говорил вам ранее, я сомневаюсь, что найдется много людей, которые оценят способность рисовать несколькими прикосновениями, хотя это вполне может быть моим ограниченным, говорящим по-английски, австралийским взглядом на Это. Удачи

person Jef    schedule 22.02.2014
comment
Здравствуйте @Jef, спасибо за ваш ответ. Вы правы, нам нужно разумно обрабатывать эти дополнительные прикосновения, и пользователь будет класть руку на экран и писать, мы не можем ожидать, что пользователь будет писать на экране, не отдыхая рукой, как он/она обычно делает заметки, поэтому, по моему мнению, это важный вопрос, который необходимо решить. - person Ranjit; 23.02.2014
comment
Привет @Jef, я думаю, проблема в функции touchesBegan:. Что сказать? - person Ranjit; 23.02.2014
comment
Здравствуйте, @Jef, помогите мне с этим stackoverflow.com /questions/22033228/eraser-the-drawing-in-ios - person Ranjit; 26.02.2014

Я наконец решил свою проблему,

Вот код

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch* topmostTouch = self.trackingTouch;
    for (UITouch *touch in touches)
    {


        touchStartPoint1 = [touch locationInView:self];


        if(!topmostTouch || [topmostTouch locationInView:self].y > touchStartPoint1.y)
        {
            ctr = 0;
            topmostTouch = touch;
            pts[0] = touchStartPoint1;
        }
    }   

    self.trackingTouch = topmostTouch;
}

Проблема была очень проста, просто установил ctr = 0 внутри чека, вот так..

person Ranjit    schedule 24.02.2014