Отображение карты - проверьте, увеличивается ли пользовательский масштаб / iOS [duplicate]

Самый простой способ - очистить поток несколько раз (в идеале больше, чем любая возможная консоль). 1024 * 1024, вероятно, не может быть никаким консольным окном.

  int main (int  argc, char * argv) {для (int i = 0; i & lt; 1024 * 1024; i ++) std :: cout & lt;  '' & lt; & lt;  станд :: епсИ;  return 0;  }  

Единственная проблема с этим - программный курсор; эта мигающая вещь (или не мигающая вещь) в зависимости от платформы / консоли будет в конце консоли, против нее. Однако это никогда не должно вызывать никаких проблем.

2
задан Darwind 29 March 2014 в 20:15
поделиться

4 ответа

Некоторые старые, но все же ... Вы можете обнаружить этот способ, сначала скажите mapView, чтобы потреблять жесты в поле зрения:

    mapView.settings.consumesGesturesInView = true

    for gestureRecognizer in mapView.gestureRecognizers! {
        gestureRecognizer.addTarget(self, action: "handleMapGesture:")
    }

Во-вторых, в вашей функции проверьте наличие 2 вещей, состояния и номера касаний.

Если состояние .Changed, начинается жест, а с двумя касаниями - щепотка зума.

Трудная двойка, вам нужно реализовать какой-то поздний слушатель и цепочку два последних жестов, способ идентифицировать «Tap» с помощью только .Begin и .End и одним касанием, для этого типа жестов нет .Changed.

Примечание: это работает на Swift 2, не тестировалось на 3 или 4

0
ответ дан Juvs 17 August 2018 в 09:10
поделиться
  • 1
    Это чересчур, просто говоря – OhadM 9 May 2018 в 08:03
  • 2
  • 3
    Ваша сложность - O (n), в то время как другие простые решения - нет. Не сказать, что это не сработает ... – OhadM 12 May 2018 в 14:37

Есть еще один способ определить, когда был изменен масштаб (или любое другое свойство), - Key-Value-Observing (иначе KVO). Это особенно полезно, когда для нас не используется метод делегата. Из Apple docs :

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

. Когда вы настраиваете свое представление в карте, добавьте этот фрагмент:

[self.mapView addObserver:self forKeyPath:@"camera.zoom" options:0 context:nil];

Теперь вам нужно реализовать метод -observeValueForKeyPath:ofObject:change:context:, чтобы фактически получить обратный вызов. Например:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {

if ([keyPath isEqualToString:@"camera.zoom"]) {

    // this static variable will hold the last value between invocations.
    static CGFloat lastZoom = 0;

    CGFloat currentZoom = [[object camera] zoom];

    if (!(fabs((lastZoom) - (currentZoom)) < FLT_EPSILON)) {

        //Zoom level has actually changed!
        NSLog(@"Zoom changed to: %.2f", [[object camera] zoom]);

    }

    //update last zoom level value.
    lastZoom = currentZoom;

    }
}

Не забудьте удалить наблюдателя в -dealloc или -viewDidDissapear в зависимости от ваших потребностей:

- (void)dealloc {

    [self.mapView removeObserver:self forKeyPath:@"camera.zoom"];

}

Счастливое кодирование: -)

5
ответ дан NKorotkov 17 August 2018 в 09:10
поделиться

Надеюсь, вы использовали GMSMapViewDelegate в файле заголовка

, используя следующий код в файле реализации, который является делегатом объекта GMSMapView

-(void)mapView:(GMSMapView *)mapView didChangeCameraPosition:(GMSCameraPosition*)position {
   float zoom = mapView.camera.zoom;
   // handle you zoom related logic
}
4
ответ дан Valentin Shamardin 17 August 2018 в 09:10
поделиться

Swift 3 Следующий код работал для меня: func mapView(_ mapView: GMSMapView, idleAt position: GMSCameraPosition) { print("Pinched or tapped on the map") } Когда пользовательский Zoom (двойные нажатия или щепотка) на экране, этот метод вызывается один раз.

1
ответ дан yasir khan 17 August 2018 в 09:10
поделиться
Другие вопросы по тегам:

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