касается обработчика событий для UIImageView

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

Похоже, я должен иметь возможность программно создать UIImageView, а затем настроить обработчик событий для его сенсорных функций.

в С# у меня было бы что-то похожее

Кнопка b = новая кнопка(); b.Click+= мой код обработчика

прямо сейчас у меня есть это

CGRect myImageRect = CGRectMake(0.0f, 0.0f, 141.0f, 151.0f);
UIImageView *myImage = [[UIImageView alloc] initWithFrame:myImageRect];

myImage.userInteractionEnabled = YES;
[myImage setImage:[UIImage imageNamed:@"myImage.png"]];
myImage.opaque = YES; // explicitly opaque for performance
[self.view addSubview:myImage];
[myImage release];

Что мне нужно сделать, чтобы переопределить события касания?

Благодарность


person madmik3    schedule 11.03.2010    source источник


Ответы (7)


Хотя это не полный ответ на ваш вопрос, я думаю, что следующее решение может быть лучше, чем выполнение «обходного пути невидимой кнопки».. просто подкласс из UIImageView и переопределить следующий метод:

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

 //your UIImageView has been touched :)

 //event -> "A UIEvent object representing the event to which the touches belong."

 //touches -> "A set of UITouch instances in the event represented by event that    represent the touches in the UITouchPhaseEnded phase."

}

надеюсь это поможет...

person samsam    schedule 16.03.2010
comment
На самом деле это не тот ответ, который я искал. Но кажется, что единственный способ, который я могу найти, это использовать наследование. Я предполагаю, что С# избаловал меня до такой степени, что я думаю, что такие методы должны быть доступны без такой большой работы. Однако спасибо. - person madmik3; 16.03.2010

У меня есть основное представление с некоторыми значками, такими как «о», чтобы открыть представление «О программе». В соответствующем контроллере (mainview) я добавил обработчик события touchesBegan. Кроме того, мне нужно проверить, какое представление было «тронуто», так как в представлении больше значков. Мой экземпляр UIImageView - "aboutImg", и необходимо проверить взаимодействие с пользователем (т.е. UI builder -> инспектор атрибутов представления).

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    if ([touch view] == aboutImg){
        [self ShowAbout];
    }
}

Убедитесь, что вы отметили «Взаимодействие с пользователем включено». Это самое простое решение

person Michael Biermann    schedule 07.01.2012
comment
Это самое простое решение. Я устанавливаю флажок «Взаимодействия с пользователем» и бросаю его в подкласс UITableViewCell, чтобы захватить несколько касаний в ячейке. Работал идеально и легко. Не нужно создавать подкласс UIImageView - person Nick Turner; 02.01.2013

Просто используйте собственный UIButton с изображением в качестве фонового изображения.

person Daniel Joseph Claudin    schedule 29.09.2010

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

person philsquared    schedule 11.03.2010

Я видел другие ответы, предлагающие поместить невидимую кнопку под UIImageView, установить представление изображения на userInteractionEnabled: NO и позволить прикосновениям проходить к кнопке.

person Kirk van Gorkom    schedule 11.03.2010

Вам не нужно ничего делать с UIImageView, вы можете использовать UIButton с типом custom и добавить к нему внутреннее действие... set button.imageview setImage: i-e:

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(0,0,100,100); //edit for you own frame
UIImage *img = [UIImage imageNamed:@"myimage.png"];
[button setImage:img forState:UIControlStateNormal];

Если вы хотите использовать UIImageView, вам нужно добавить жесты к вашему изображению. иначе вы можете подклассифицировать свой UIImageView, а затем использовать сенсорные события.

person Umair Aamir    schedule 27.09.2012

Самый простой способ добавить событие onClick в UIImageView или UIView — добавить к нему распознаватель жестов касания.

UIImage *myImage = [UIImage imageNamed:@"myImage.png"];
UIImageView *myImageView = [[UIImageView alloc] initWithImage: myImage];

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action: @selector(onImageViewClicked)];
singleTap.numberOfTapsRequired = 1;
singleTap.numberOfTouchesRequired = 1;
[self.myImageView addGestureRecognizer:singleTap];
[self.myImageView setUserInteractionEnabled:YES];
person Josh    schedule 27.08.2013