Два вида с мультитач

Я должен управлять двумя разными представлениями внутри моего основного представления; Я хочу определить точное количество пальцев внутри моих представлений, то есть, если у меня есть четыре пальца внутри «первого представления», мне нужна переменная, которая говорит мне, что значение = 4, и если у меня есть 3 пальца во «втором представлении», я хочу другой var, который говорит мне, что значение = 3. Я покажу вам свой код, который не работает нормально.

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

    UITouch *touch = [[event allTouches] anyObject];
    CGPoint touchLocation = [touch locationInView:self.view];

    NSLog(@"cgpoint:%f,%f", touchLocation.x, touchLocation.y);

    if (CGRectContainsPoint(view1.frame, touchLocation)){

        NSLog(@"TOUCH VIEW 1");
        totalTouch1 = [[event allTouches]count];
        NSLog(@"TOTAL TOUCH 1:%d", totalTouch1); 
    }

    else if (CGRectContainsPoint(view2.frame, touchLocation)){

        NSLog(@"TOUCH VIEW 2");
        totalTouch2 = [[event allTouches]count];
        NSLog(@"TOTAL TOUCH 2:%d", totalTouch2);
     }
 }

С моим кодом, если я начинаю класть палец в «первом представлении», все в порядке, но, например, если я кладу четвертый палец во второе представление, мой код вводит первое «если» и говорит, что мой палец все еще находится в первом представлении. . Я не понимаю проблемы.


person cyclingIsBetter    schedule 12.04.2013    source источник


Ответы (1)


[[event allTouches] anyObject]; приносит вам только одно касание.

вам нужно перебрать все прикосновения так:

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

    int touch1 = 0;
    int touch2 = 0;
    NSArray *touches = [[event allTouches] allObjects];
    for( UITouch *touch in touches ) {
        CGPoint touchLocation = [touch locationInView:self.view];

        NSLog(@"cgpoint:%f,%f", touchLocation.x, touchLocation.y);

        if (CGRectContainsPoint(view1.frame, touchLocation)){

            NSLog(@"TOUCH VIEW 1");
            touch1 += 1;
            NSLog(@"TOTAL TOUCH 1:%d", totalTouch1);
        }

        else if (CGRectContainsPoint(view2.frame, touchLocation)){

            NSLog(@"TOUCH VIEW 2");
            touch2 += 1;
            NSLog(@"TOTAL TOUCH 2:%d", totalTouch2);
        }
    }

    NSLog(@"Total touches on view 1: %d", touch1);
    NSLog(@"Total touches on view 2: %d", touch2);
}
person user352891    schedule 12.04.2013