Помощь прикосновенияМодули при перетаскивании пальцев

Я реализую touchhesMoved, touchhesBegan и touchEEded на нескольких UIButtons, так что я могу скользить по ним пальцами и называть их соответствующими действиями.

Похоже, что он работает почти так, как предполагалось, если я нажимаю два пальца за рамки двух кнопок, а затем одновременно вставляю их в рамки кнопок, функция в пределах touchesMoved вызывается несколько раз. Вместо этого он должен вызывать только каждую функцию кнопки один раз в рамке кнопки.

Ниже мой код.

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

{

for(UITouch *t in touches) {

CGPoint location = [t locationInView:t.view];

if(CGRectContainsPoint(Button1.frame, location)) 
{
    if (!Button1.isHighlighted){
        if(!button1Highlighted) {
            [self doAction1];
        }
        [Button1 setHighlighted:YES];
        button1Highlighted = YES;
    }
}
else {
    [Button1 setHighlighted:NO];
    button1Highlighted = NO;
}
if(CGRectContainsPoint(Button2.frame, location)) 
{
    if (!Button2.isHighlighted){
        if(!button2Highlighted) {
            [self doAction2];
        }
        [Button2 setHighlighted:YES];
        button2Highlighted = YES;
    }
}
else {
    [Button2 setHighlighted:NO];
    button2Highlighted = NO;
}

}

}

- (void) touchesBegan: (NSSet *) касается событияEvent: (UIEvent *) {

for(UITouch *t in touches) {

    CGPoint location = [t locationInView:t.view];

    if(CGRectContainsPoint(Button1.frame, location)) 
    {
        [Button1 setHighlighted:YES];
        button1Highlighted = YES;
        [self doAction1];
    }
    if(CGRectContainsPoint(Button2.frame, location)) 
    {
        [Button2 setHighlighted:YES];
        button2Highlighted = YES;
        [self doAction2];
    }
}

}

- (void) touchesEnded: (NSSet *) касается событияEvent: (UIEvent *) {

for(UITouch *t in touches) {

    CGPoint location = [t locationInView:t.view];

    if(CGRectContainsPoint(Button1.frame, location)) 
    {
        [Button1 setHighlighted:NO];
        button1Highlighted = NO;
    }
    if(CGRectContainsPoint(Button2.frame, location)) 
    {
        [Button2 setHighlighted:NO];
        Button2Highlighted = NO;
            }
}

}

Любая помощь сильно обостряется. Спасибо!

+1
источник поделиться
2 ответа

Я закончил работу над тем, чтобы сохранить количество касаний на экране в переменной, называемой touchhesCount. Затем я увеличиваю его в touchhesBegan и уменьшаю его в touchEnded. Затем в касанияхMoved перед вызовом doActionX я проверил, чтобы убедиться, что touchsCount < 2.

0
источник

Если -touchesMoved: получает вызов с несколькими касаниями, так что один прикосновение к Button1 и другому к Button2, и обе кнопки не подсвечиваются, тогда при касании Button1 будет выделяться Button1 и unhighlight Button2. Между тем, в том же цикле в том же вызове -touchesMoved: прикосновение к Button2 будет по существу reset Button1 выделить состояние назад до неопределенного.

-touchesMoved: будет вызываться до тех пор, пока будут касания, и каждый вызов снова запустит две кнопки.

Возможно, вам нужно добавить свойство hasBeenHighlighted для ваших кнопок. Я не уверен, как лучше всего инициализировать это свойство NO для всех ваших кнопок. Но для этого необходимо установить значение YES внутри -setHighlighted: и его нужно будет проверить перед вызовом -doActionX.

Я не уверен, что я точно понимаю, чего вы пытаетесь достичь, но я надеюсь, что это поможет.

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос