Я разместил изображение (UIImageView) на панели навигации. Теперь я хочу обнаружить событие касания и хочу обработать событие. Не могли бы вы сообщить мне, как я могу это сделать?
Спасибо.
Я разместил изображение (UIImageView) на панели навигации. Теперь я хочу обнаружить событие касания и хочу обработать событие. Не могли бы вы сообщить мне, как я могу это сделать?
Спасибо.
В практическом плане не делайте этого.
Вместо этого добавьте кнопку с пользовательским стилем (без кнопок, если вы не укажете изображения) над UIImageView. Затем присоедините любые методы, которые вы хотите вызвать.
Вы можете использовать эту технику для многих случаев, когда вы действительно хотите, чтобы какая-то область экрана выступала в качестве кнопки, а не возилась с материалом Touch.
A UIImageView
получается из a UIView
, который получен из UIResponder
, поэтому он готов обрабатывать события касания. Вы хотите предоставить методы touchesBegan
, touchesMoved
и touchesEnded
, и они будут вызваны, если пользователь удалит изображение. Если все, что вам нужно, это событие нажатия, проще просто использовать пользовательскую кнопку с изображением, установленным в качестве изображения кнопки. Но если вы хотите, чтобы более тонкий контроль над метками, перемещениями и т.д., Это путь.
Вы также захотите посмотреть еще несколько вещей:
Отмените canBecomeFirstResponder
и верните YES, чтобы указать, что представление может стать фокусом сенсорных событий (по умолчанию НЕТ).
Установите для свойства userInteractionEnabled
значение YES. Значение по умолчанию для UIViews
равно YES, но для UIImageViews
нет NO, поэтому вы должны явно включить его.
Если вы хотите отвечать на события с несколькими касаниями (т.е. щепотку, масштабирование и т.д.), вы должны установить multipleTouchEnabled
в YES.
Чтобы добавить событие касания к UIImageView, используйте следующее в своем .m
UITapGestureRecognizer *newTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myTapMethod)];
[myImageView setUserInteractionEnabled:YES];
[myImageView addGestureRecognizer:newTap];
-(void)myTapMethod{
// treat image tap
}
надеюсь, что это поможет.
Вы также можете добавить UIGestureRecognizer. Это не требует, чтобы вы добавили дополнительный элемент в свою иерархию представлений, но все же предоставляете вам все хорошо написанный код для обработки событий касания с довольно простым интерфейсом:
UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc]
initWithTarget:self action:@selector(handleSwipe:)];
swipeRight.direction = UISwipeGestureRecognizerDirectionRight;
[imgView_ addGestureRecognizer:swipeRight];
[swipeRight release];
UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc]
initWithTarget:self action:@selector(handleSwipe:)];
swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft;
[imgView_ addGestureRecognizer:swipeLeft];
[swipeLeft release];
В последние несколько часов я занимался разными темами, пытаясь найти решение для своей проблемы, но безрезультатно.
Я вижу, что многие разработчики разделяют эту проблему, и я думаю, что люди здесь знают об этом.
У меня есть несколько изображений внутри UIScrollView
, пытаясь получить от них события перехода.
не получать какие-либо события из UIImangeView
, но я получаю событие от аналогичного UILable
с очень похожими параметрами, которые я устанавливаю для него. под IOS 5.1.
Я уже сделал следующее:
UIImageView
.UIImageView
, не помогло.Прикрепляя некоторый код ниже, в этом коде я инициализирую как UIImageView
, так и UILabel
, ярлык отлично работает с точки зрения событий стрельбы. Я попробовал оставить ненужный код.
Спасибо, парни,
Илан
UIImageView *single_view = [[UIImageView alloc]initWithFrame:CGRectMake(200, 200, 100, 100)];
single_view.image=img;
single_view.layer.zPosition=4;
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapGestureCaptured:)];
[single_view addGestureRecognizer:singleTap];
[single_view setMultipleTouchEnabled:YES];
[single_view setUserInteractionEnabled:YES];
[self.myScrollView addSubview:single_view];
self.myScrollView.userInteractionEnabled=YES;
UILabel *testLabel = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
testLabel.backgroundColor=[UIColor redColor];
[self.myScrollView addSubview:testLabel];
[testLabel addGestureRecognizer:singleTap];
[testLabel setMultipleTouchEnabled:YES];
[testLabel setUserInteractionEnabled:YES];
testLabel.layer.zPosition=4;
И метод, который обрабатывает событие:
- (void)singleTapGestureCaptured:(UITapGestureRecognizer *)gesture
{
UIView *tappedView = [gesture.view hitTest:[gesture locationInView:gesture.view] withEvent:nil];
NSLog(@"Touch event on view: %@",[tappedView class]);
}
Как сказано, приемник метки получен.
Вместо того, чтобы сделать сенсорный UIImageView, а затем поместив его на навигационную панель, вы должны просто создать UIBarButtonItem, который вы делаете из UIImageView.
Сначала сделайте вид изображения:
UIImageView *yourImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"nameOfYourImage.png"]];
Затем сделайте элемент с барметом из изображения:
UIBarButtonItem *yourBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:yourImageView];
Затем добавьте элемент панели на панель навигации:
self.navigationItem.rightBarButtonItem = yourBarButtonItem;
Помните, что этот код входит в контроллер вида, который находится внутри массива контроллера управления навигационным контроллером. Таким образом, этот "сенсорный элемент штриховки штрих-кода" будет отображаться только на панели навигации, когда этот контроллер просмотра будет отображаться. Когда вы нажимаете другой контроллер вида, этот элемент панели навигации исчезает ~
Что вы можете сделать, это переопределить метод touchesBegan:withEvent:
UIView
(или подкласса), который содержит подтекст UIImageView
.
В этом методе проверьте, входит ли какая-либо из UITouch
в пределы экземпляра UIImageView
(предположим, что он называется imageView
).
То есть, элемент CGPoint
[touch locationInView]
пересекается с элементом CGRect
[imageView bounds]
? Изучите функцию CGRectContainsPoint
для запуска этого теста.
Сначала вы должны поместить UIButton, затем либо вы можете добавить фоновое изображение для этой кнопки, либо вам нужно поместить UIImageView поверх кнопки.
или же
Вы можете добавить жест касания к UIImageView, чтобы получить действие щелчка при нажатии на UIImageView.
Для тех из вас, кто ищет решение Swift 4 для этого ответа. Вы можете использовать следующее для обнаружения сенсорного события в UIImageView.
let gestureRecognizer: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(imageViewTapped))
imageView.addGestureRecognizer(gestureRecognizer)
imageView.isUserInteractionEnabled = true
Затем вам нужно будет определить ваш селектор следующим образом:
@objc func imageViewTapped() {
// Image has been tapped
}
Добавьте жест этого изображения view.add в это представление, тогда он также обнаружит жест на изображении. Может быть, вы попытаетесь с помощью метода делегата касания, тогда в этом случае он также может обнаруживать. Благодаря