Определить, есть ли прикосновение к движущемуся UIImageView из View Controller - PullRequest
1 голос
/ 25 сентября 2011

У меня есть UIViewController, который обнаруживает сенсорные события с touchesBegan. Есть движущиеся объекты UIImageView, которые плавают по экрану, и мне нужно посмотреть, произошло ли событие касания на одном из них. Что я пытаюсь:

UITouch* touch = [touches anyObject];

if ([arrayOfUIImageViewsOnScreen containsObject: [touch view]]) {
    NSLog(@"UIImageView Touched!");
}

Но этого никогда не происходит. Также, если бы я сделал что-то вроде этого:

int h = [touch view].bounds.size.height;
NSLog([NSString stringWithFormat: @"%d", h]);

выводит высоту всего UIViewController (экрана) каждый раз, даже если я касаюсь одного из UIImageViews, поэтому ясно, что [touch view] не дает мне UIImageView. Как определить, когда нажата только UIImageView? Пожалуйста, не предлагайте использовать кнопки UIB.

Спасибо!

Ответы [ 5 ]

1 голос
/ 25 сентября 2011

Если вы хотите определять только при нажатии UIImageView, проверьте класс:

if (touch.view.class == [UIImageView class]) {
    //do whatever
}
else {
    //isnt a UIImageView so do whatever else
}

Редактировать ----

Вы не установили userInteraction включенным дляUIImageView есть у тебя?!

0 голосов
/ 07 октября 2011

Забыл об этом вопросе - проблема была в том, что я не дождался, пока viewDidLoad установит userInteractionEnabled в моем UIImageView.

0 голосов
/ 26 сентября 2011

Если вы хотите проверить сенсорное средство, используйте CGRectContainsPoint.

1. Захватите событие касания и получите точку, к которой вы прикоснулись,

2.Сделайте CGRect, который ограничивает объект, который вы хотите проверить событие касания,

3.Используйте CGRectContainsPoint (CGRect, CGPoint) и перехватите логическое возвращаемое значение.

http://developer.apple.com/library/ios/#DOCUMENTATION/GraphicsImaging/Reference/CGGeometry/Reference/reference.html

Вот ссылка на класс для CGRect.

0 голосов
/ 25 сентября 2011

Вы можете попробовать отправить сообщение hitTest на CALayer основного вида одним из прикосновений - он вернет CALayer дальше всего по иерархии подпредставлений, к которой вы прикоснулись.

Затем вы можете проверить, является ли слой, к которому вы прикоснулись, слоем одного из UIImageView, и перейти оттуда.

Этот код использует точку, сгенерированную из UIGestureRecognizer.

CGPoint thePoint = [r locationInView:self.view];
thePoint = [self.view.layer convertPoint:thePoint toLayer:self.view.layer.superlayer];
selectedLayer = [self.view.layer hitTest:thePoint];
0 голосов
/ 25 сентября 2011

Я знаю, что вы сказали, пожалуйста, не предлагайте использовать кнопки UIB, но кнопки звучат как лучший / самый простой способ для меня.

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