касается обработчика событий для UIImageView
-
19-09-2019 - |
Вопрос
Я только начинаю рассказывать о разработке iPhone и не могу найти ответ. Я ищу то, чем хочу заниматься.
Кажется, я смогу программно создать UIImageView, а затем настроить обработчик событий для его сенсорных функций.
в С# у меня было бы что-то вроде
Кнопка б = новая кнопка();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];
Что мне нужно сделать, чтобы переопределить события касания?
Спасибо
Решение
Хотя это не полный ответ на ваш вопрос, я думаю, что следующее решение может быть лучше, чем «обходной путь с невидимой кнопкой».просто создайте подкласс от 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."
}
надеюсь это поможет...
Другие советы
У меня есть главный экран с некоторыми значками, такими как «О программе», чтобы открыть представление «О программе».В соответствующем контроллере (mainview) я добавил обработчик событий touchesBegan.Более того, мне нужно проверить, какое представление было «затронуто», так как в представлении больше значков.Мой экземпляр UIImageView — «aboutImg», и необходимо проверить взаимодействие с пользователем (т.Конструктор пользовательского интерфейса -> инспектор атрибутов представления).
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
if ([touch view] == aboutImg){
[self ShowAbout];
}
}
Обязательно установите флажок «Взаимодействие с пользователем включено».Это самое простое решение
Просто используйте собственный UIButton с изображением в качестве фонового изображения.
Я не нашел способа сделать это напрямую с помощью UIImageView
.Но если вы создадите его подкласс и переопределите nextResponder
Чтобы вернуть делегата под ваш контроль, вы можете делать то, что вам нужно.Предоставьте делегат как свойство подкласса, и тогда вы сможете передать делегат для событий касания и изменить его в любое время.
Я видел, что другие ответы предлагают разместить невидимую кнопку под UIImageView, установив вид изображения на userInteractionEnabled: NO
, и позволяя касаниям передаваться на кнопку.
Вам не нужно ничего общего с UIImageView. Вы можете использовать UIButton с типом custom и добавить к нему внутреннее действие... set button.imageview setImage:то есть:
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, а затем использовать события касания.
Самый простой способ добавить событие 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];