Цель-C - заставить несколько представлений реагировать на одно и то же сенсорное событие? - PullRequest
2 голосов
/ 12 сентября 2011

Как вы все знаете в Cocoa-touch, графический интерфейс состоит из нескольких UIView с. Теперь, на мой взгляд, у меня есть UIImageView (содержащий изображение), который выровнен в x: 10 y: 10, затем у меня есть UILabel, выровненный в x: 30 y: 10, и, наконец, еще один UILabel, выровненный в х: 50 у: 10.

Теперь я бы хотел, чтобы все эти UIView реагировали на одно и то же событие касания. Что было бы самым простым способом сделать это? Было бы создать UIView, который будет выровнен по x: 10 y: 10 и охватит все виды, а затем поместит этот вид поверх этих видов (-bringSubviewToFront)?

Приветствия

Peter

Ответы [ 2 ]

0 голосов
/ 12 сентября 2011

Поймать события касания в верхнем представлении и явно передать эти касания другим интересующим вас представлениям. Но убедитесь, что точка касания пересекает другие представления, которым вы отправляете события касания

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

UITouch * touch =    [[touches allObjects] objectAtIndex:0];

CGPoint point = [touch locationInView:topView];


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

    [view1 touchesBegan:[NSSet setWithObject:touch] withEvent:nil];
}

if (CGRectContainsPoint(view2.frame, point)) {

    [view2 touchesBegan:[NSSet setWithObject:touch] withEvent:nil];
}

}
0 голосов
/ 12 сентября 2011

Я думаю, что ваш вариант в порядке!Просто создайте UIView и отслеживайте все сенсорные события.

Или вы можете поместить все свои подпредставления (изображение, метка, метка) в одно подпредставление mergeView основного вида, отключить взаимодействие пользователя с этими представлениями (изображение, метка, метка) и mergeView добавить жестраспознаватель или что вы хотите поймать прикосновения.При таком подходе вам будет проще изменить положение ваших взглядов: просто измените положение mergeView.Не забудьте включить взаимодействие с пользователем mergeView.

...