Событие касания в UIImageView - PullRequest
       3

Событие касания в UIImageView

0 голосов
/ 04 декабря 2009

Как определить, к какому UIImageView я прикасаюсь на экране? Как, например, я добавил 10x10 плиточный UIImageView в UIView. Теперь в касаниях Начал, как я могу узнать изображение, которого я касаюсь на экране? Должен ли я использовать метод hitTest в этой реализации?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 04 декабря 2009

Я обычно считаю, что самый простой способ - это создать подкласс UIImageView и добавить мои собственные обработчики сенсорных событий.

На самом деле я часто создавал один подкласс UIImageView, единственная цель которого - позволить другому классу действовать в качестве следующего респондента. Таким образом, мне не нужно создавать подклассы для каждой ситуации. Это стоит делать, только если вам нужно несколько этих представлений, и вы все равно не делите их на подклассы.

0 голосов
/ 04 декабря 2009

Чтобы прокомментировать предложение UIButton, вот фрагмент того, что я сделал для UIButton, который отображается с UIImage.

Это было для отслеживания определенного UIButton типа изображения, которое было затронуто в пределах UITableViewCell, и оно проходит вдоль строки и раздела, в котором было размещено это UIButton:

UIButton *_infoButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
[_infoButton setImage:[UIImage imageNamed:@"Info.png"] forState:UIControlStateNormal];
[_infoButton setTitle:[NSString stringWithFormat:@"%d:%d", indexPath.section, indexPath.row] forState:UIControlStateReserved]; 
[_infoButton addTarget:self action:@selector(touchedDetailedInfoButton:) forControlEvents:UIControlEventTouchDown];
// ...
[ _infoButton release];

А вот связанный метод восстановления заголовка и выполнения с ним чего-то интересного:

- (void) touchedDetailedInfoButton:(NSString *)title {
    unsigned int _section, _row;
    const char * _indexPathCharPtr = [title cStringUsingEncoding:NSUTF8StringEncoding];
    sscanf(_indexPathCharPtr, "%d:%d", &_section, &_row);
    NSUInteger _path[2] = {_section, _row};
    NSIndexPath *_touchedIndexPath = [[NSIndexPath alloc] initWithIndexes:_path length:2];
    [self doSomethingInterestingWithIndexPath:_touchedIndexPath];
    [_touchedIndexPath release];
}

Вероятно, есть более простой способ сделать это, так что, надеюсь, кто-то другой придет и предложит альтернативу (кроме подкласса UIImageView, который также является вполне допустимым вариантом).

0 голосов
/ 04 декабря 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...