Прерывание/Угон iPhone Touch Events для MKMapView

Зависит от того, что это означает, что объект не найден.

, Если это - нормальное состояние дел, затем возвратите пустой указатель. Это - просто что-то, что могло бы произойти однажды в, в то время как, и вызывающие стороны должен проверить на него.

, Если это - ошибка, затем выдайте исключение, вызывающие стороны должны решить, что сделать с состоянием ошибки недостающего объекта.

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

6
задан 14 July 2009 в 01:11
поделиться

4 ответа

MKMapView не отвечает на методы сенсорного ввода, перечисленные выше ...

0
ответ дан 8 December 2019 в 13:48
поделиться

Попробуйте

[super touchEnded: касается withEvent: event];

вместо

[map touchesEnded: touch withEvent: event];

И примените эту идею ко всем методам событий касания. Таким образом, касания должны пройти вниз по цепочке респондентов, и мир будет восстановлен.

1
ответ дан 8 December 2019 в 13:48
поделиться

У меня была та же проблема - я хотел нарисовать масштабы карты поверх просмотра карты. Для этого мне пришлось перехватывать события касания, а затем отправлять их обратно в представление карты. К сожалению, когда MKMapView не является исходным приемником событий, некоторые плавные анимации панорамирования и масштабирования больше не работают.

Однако я нашел решение этой проблемы - немного хакерское, но работает: 1. Я поместил свой MapScales UIView поверх MKMapView и отключил в нем получение событий, чтобы базовый MKMapView получал события по умолчанию. 2. Я создал подкласс UIWindow с классом MyMainWindow, и в нем я переопределил метод:

- (void) sendEvent:(UIEvent*)event {
  [super sendEvent:event];
  [self send_the_event_also_to_my_MapScales_component_with_use_of_listener_design_pattern];
}
  1. Я сделал главное окно моего приложения экземпляром MyMainWindow.

Таким образом, мой компонент MapScales получает и может реагировать на все события касания, и в то же время он не портит лежащий в основе MKMapView :)

5
ответ дан 8 December 2019 в 13:48
поделиться

В продолжение ответа @chomasek, чтобы обрабатывать только те касания для вида карты, я делаю следующее:

  1. Даю виду карты тег, например 99
  2. Когда я получаю касание, перехожу по иерархии видов принимающего вида, ища вид с вышеуказанным тегом.

Вот код:

// this is in the view controller containing the map view
// kICTagForMapView is just a constant
_mapView.tag = kICTagForMapView;

Затем в sendEvent:

// this does into the UIWindow subclass
BOOL isMapView = NO;    
UIView* superView = touch.view.superview;
while(superView)
{
    //Debug(@"superView = %@", superView);
    if (superView.tag == kICTagForMapView)
    {
        isMapView = YES;
        break;
    }
    superView = superView.superview;
}

if (isMapView == NO) return;

// do stuff here
1
ответ дан 8 December 2019 в 13:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: