iphone - UIView с метками, обнаружение касания при перемещении пальцев по нему

У меня есть представление с 10-символьными метками (большими буквами). Каждый символ (метка) имеет свой тег. Функционал, который я разрабатываю, называется «Трассировка». Когда пользователь перемещает палец по представлению, я хочу определить, к какому символу он прикоснулся. Я думаю, что я должен реализовать,

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

Но я не знаю, как определить прикосновение к этикетке и определить характер. Кто-нибудь может мне помочь?


person Satyam    schedule 09.06.2011    source источник


Ответы (2)


Если вы хотите узнать представление, с которого началось касание (на какое представление пользователь указал пальцем), вы можете прочитать любой из элементов касания, возвращаемых в NSSet, например так:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSInteger viewTag = [[[touches anyObject] view] tag];

    //Check your view using the tags you've set...
}

Однако, даже когда палец перемещается по экрану, это свойство view будет возвращать ТОЛЬКО представление, к которому было первоначально приложено, а не представление, которое в данный момент находится под пальцем. Для этого вам нужно будет отслеживать координаты текущего касания и определять, в какой вид оно попадает, возможно, так:

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

    CGPoint point = [touch locationInView:self.view]; 

    //If all your views are collected as an array
    for(UIView *view in views) {
        if (CGRectContainsPoint([view frame], point))
        {
            //Bingo
        }
    }
}

Ключ к успеху в этом заключается в том, чтобы убедиться, что вы обращаетесь с координатами к нужным представлениям, поэтому не забудьте правильно вызвать locationInView: и CGRectContainsPoint() со значениями, которые соответствуют иерархии представлений вашего приложения и месту размещения этого кода (т.е. Вид, ViewController и т. д.)

Надеюсь, это поможет!

person devunwired    schedule 09.06.2011
comment
Большое спасибо за решение. - person Satyam; 09.06.2011

Для обнаружения простых касаний вы можете использовать UIGestureRecognizer. Подробнее об этом читайте в документации. Для более сложных операций вам необходимо реализовать:

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

Чтобы определить, какой элемент был затронут, вы можете указать значения тегов вашего элемента:

myView.tag = 4;

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

person Dancreek    schedule 09.06.2011