Самый простой способ - очистить поток несколько раз (в идеале больше, чем любая возможная консоль). 1024 * 1024, вероятно, не может быть никаким консольным окном.
int main (int argc, char * argv) {для (int i = 0; i & lt; 1024 * 1024; i ++) std :: cout & lt; '' & lt; & lt; станд :: епсИ; return 0; }
Единственная проблема с этим - программный курсор; эта мигающая вещь (или не мигающая вещь) в зависимости от платформы / консоли будет в конце консоли, против нее. Однако это никогда не должно вызывать никаких проблем.
Некоторые старые, но все же ... Вы можете обнаружить этот способ, сначала скажите 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
Есть еще один способ определить, когда был изменен масштаб (или любое другое свойство), - Key-Value-Observing (иначе KVO). Это особенно полезно, когда для нас не используется метод делегата. Из Apple docs :
Наблюдение за ключевыми значениями обеспечивает механизм, позволяющий объектам получать уведомления об изменениях в конкретных свойствах других объектов.
blockquote >. Когда вы настраиваете свое представление в карте, добавьте этот фрагмент:
[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"]; }
Счастливое кодирование: -)
Надеюсь, вы использовали GMSMapViewDelegate
в файле заголовка
, используя следующий код в файле реализации, который является делегатом объекта GMSMapView
-(void)mapView:(GMSMapView *)mapView didChangeCameraPosition:(GMSCameraPosition*)position {
float zoom = mapView.camera.zoom;
// handle you zoom related logic
}
Swift 3 Следующий код работал для меня:
Когда пользовательский Zoom (двойные нажатия или щепотка) на экране, этот метод вызывается один раз. func mapView(_ mapView: GMSMapView, idleAt position: GMSCameraPosition) {
print("Pinched or tapped on the map")
}