К какому объекту или виду я прикоснулся? - PullRequest
0 голосов
/ 15 ноября 2009

Работа в ViewController, который имеет несколько представлений, которые были добавлены в него как подпредставления, и у меня есть метод touchesBegan:

    UIImageView *testImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"test.png"]];
    testImage.frame = CGRectMake(0, 0, 480, 280);
    [self.view addSubview:testImage];

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    CGPoint point;
    UITouch *touch = [touches anyObject];
    point.x = [touch locationInView:self.view].x;
    point.y = [touch locationInView:self.view].y;

    if ( point.y >= 280 && point.y <= 320 )
    {
        if ( point.x >= 0 && point.x <= 160 )
        {
            [self menu1];
        }

        if ( point.x >= 161 && point.x <= 320 )
        {
            [self menu2];
        }

        if ( point.x >= 321 && point.x <= 480 )
        {
            [self menu3];
        }
    }
}

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

Есть ли способ увидеть, какой вид был нажат в касаниях или событии или в этом коде сверху:

UITouch *touch = [touches anyObject];

Любая помощь приветствуется //:)

Ответы [ 4 ]

3 голосов
/ 15 ноября 2009

Скажем, у вас есть контроллер представления с этими ivars (подключитесь к элементам управления в Интерфейсном Разработчике)

IBOutlet UILabel *label;
IBOutlet UIImageView *image;

Чтобы определить, касалось ли касание этих элементов или фона, view добавьте этот метод в свой контроллер вида.

  -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
{  
    UITouch *touch = [[event allTouches] anyObject];

    if ([touch view] == label) {
        NSLog(@"touched the label");
    }

    if ([touch view] == image) {
        NSLog(@"touched the image");
    }

    if ([touch view] == self.view) {
        NSLog(@"touched the background");
    }
}

Любой подкласс UIView, такой как UIView, UILabel или UIImageView, на который вы хотите реагировать на прикосновения, должен иметь для свойства .userInteractionEnabled значение YES.

3 голосов
/ 15 ноября 2009

[touch view] даст вам вид, в котором изначально произошло касание (то есть, этот вид останется прежним, даже если пользователь отодвинет палец от вида во время касания).

Если это не то поведение, которое вам требуется, используйте:

[self.view hitTest:[touch locationInView:self.view] withEvent:event];
1 голос
/ 15 ноября 2009

Почему вы проводите собственное тестирование? Тривиально просто размещать прозрачные кнопки там, где вы хотите.

1 голос
/ 15 ноября 2009

Я мог бы что-то упустить, но разве ваши элементы "menuX" не имеют своих собственных ссылок, описывающих их размеры и расположение? Тогда все, что вы делаете, это спрашиваете, находится ли точка в этих прямоугольниках.

...