Обнаружение касаний для слоев в UIScrollView - PullRequest
3 голосов
/ 29 сентября 2010

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

Единственная проблема, которую я не могу преодолеть, - это определить, какой подуровень являетсяпрослушивается.Я устанавливаю layer.name в число индексов, и подкласс UIScrollView действительно получает событие касания.Теперь последнее оставшееся препятствие - как выполнить hitTest для подслоев, чтобы получить свойство name и вуаля!

Я думал о создании подкласса UIView в качестве контейнера CALayer и захвате события касания таким образом.Но я надеюсь, что, возможно, найдется более экономичный способ определения подслоя, к которому прикасаются.

Код, который я пробовал (в моем подклассе UIScrollView):

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    if ([touches count] == 1) {
        for (UITouch *touch in touches) {

            CGPoint point = [touch locationInView:[touch view]];
            CALayer *alayer = [self.layer hitTest:point];
            if (alayer) NSLog(@"layer %@ touched",alayer.name);
            else NSLog(@"layer not detected");

        } 
    } 
}

Я получаю дваошибки компиляции.первое предупреждение: метод hitTest не найден.и ошибка "запрос на член 'name' не является структурой или объединением".

1 Ответ

2 голосов
/ 29 сентября 2010

Звоните [scrollView.layer hitTest:touchPoint];. Возвращаемое значение будет тем слоем, который был затронут. Если возвращаемый слой равен scrollView.layer, подслой не был нажат.

...