Вопрос

Я только начинаю рассказывать о разработке 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];
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top