Touch-Gesten zur Kartensteuerung aktivieren und deaktivieren

Die Karte reagiert nur dann auf Zoom-Gesten, wenn der Schalter aktiviert ist.

Jetzt starten

Bevor Sie den Beispielcode ausprobieren können, müssen Sie Ihre Entwicklungsumgebung konfigurieren. Weitere Informationen finden Sie unter Maps SDK for iOS – Beispielcode.

Code ansehen

Swift

import GoogleMaps
import UIKit

class GestureControlViewController: UIViewController {
  private let holderHeight: CGFloat = 60
  private let zoomLabelInset: CGFloat = 16

  private lazy var mapView: GMSMapView = {
    let camera = GMSCameraPosition(latitude: -25.5605, longitude: 133.605097, zoom: 3)
    return GMSMapView(frame: .zero, camera: camera)
  }()
  private lazy var zoomSwitch: UISwitch = UISwitch(frame: .zero)

  override func viewDidLoad() {
    super.viewDidLoad()

    view.addSubview(mapView)

    let holder = UIView(frame: .zero)
    holder.backgroundColor = UIColor(white: 1, alpha: 0.8)
    view.addSubview(holder)

    let zoomLabel = UILabel(frame: .zero)
    zoomLabel.text = "Zoom gestures"
    zoomLabel.font = .boldSystemFont(ofSize: 18)
    holder.addSubview(zoomLabel)

    // Control zooming.
    holder.addSubview(zoomSwitch)
    zoomSwitch.addTarget(self, action: #selector(toggleZoom), for: .valueChanged)
    zoomSwitch.isOn = true

    [mapView, holder, zoomLabel, zoomSwitch].forEach({
      $0.translatesAutoresizingMaskIntoConstraints = false
    })
    NSLayoutConstraint.activate([
      mapView.leftAnchor.constraint(equalTo: view.leftAnchor),
      mapView.rightAnchor.constraint(equalTo: view.rightAnchor),
      mapView.topAnchor.constraint(equalTo: view.topAnchor),
      mapView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
      holder.heightAnchor.constraint(equalToConstant: holderHeight),
      holder.centerXAnchor.constraint(equalTo: view.centerXAnchor),
      holder.widthAnchor.constraint(equalTo: view.widthAnchor),
      zoomLabel.leftAnchor.constraint(equalTo: holder.leftAnchor, constant: zoomLabelInset),
      zoomLabel.centerYAnchor.constraint(equalTo: holder.centerYAnchor),
      zoomSwitch.rightAnchor.constraint(equalTo: holder.rightAnchor, constant: -zoomLabelInset),
      zoomSwitch.centerYAnchor.constraint(
        equalTo: holder.centerYAnchor),
    ])
    NSLayoutConstraint.activate([
      holder.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor)
    ])
  }

  @objc func toggleZoom() {
    mapView.settings.zoomGestures = zoomSwitch.isOn
  }

}
      

Objective-C

#import "GoogleMapsDemos/Samples/GestureControlViewController.h"

#import <GoogleMaps/GoogleMaps.h>

@implementation GestureControlViewController {
  GMSMapView *_mapView;
  UISwitch *_zoomSwitch;
}

- (void)viewDidLoad {
  [super viewDidLoad];
  GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-25.5605
                                                          longitude:133.605097
                                                               zoom:3];

  _mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
  _mapView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
  _mapView.accessibilityIdentifier = @"gestureControlDemoMapView";

  self.view = [[UIView alloc] initWithFrame:CGRectZero];
  [self.view addSubview:_mapView];

  UIView *holder = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 59)];
  holder.autoresizingMask =
      UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin;
  holder.backgroundColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.8f];
  [self.view addSubview:holder];

  // Zoom label.
  UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(16, 16, 200, 29)];
  label.text = @"Zooming?";
  label.font = [UIFont boldSystemFontOfSize:18.0f];
  label.textAlignment = NSTextAlignmentLeft;
  label.backgroundColor = [UIColor clearColor];
  label.layer.shadowColor = [[UIColor whiteColor] CGColor];
  label.layer.shadowOffset = CGSizeMake(0.0f, 1.0f);
  label.layer.shadowOpacity = 1.0f;
  label.layer.shadowRadius = 0.0f;
  [holder addSubview:label];

  // Control zooming.
  _zoomSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(-90, 16, 0, 0)];
  _zoomSwitch.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
  [_zoomSwitch addTarget:self
                  action:@selector(didChangeZoomSwitch)
        forControlEvents:UIControlEventValueChanged];
  _zoomSwitch.on = YES;
  [holder addSubview:_zoomSwitch];
}

- (void)didChangeZoomSwitch {
  _mapView.settings.zoomGestures = _zoomSwitch.isOn;
}

@end
      

Vollständige Beispielanwendung lokal ausführen

Die Beispielanwendung für das Maps SDK for iOS ist als Downloadarchiv auf GitHub verfügbar. So installieren und testen Sie die Beispiel-App für das Maps SDK for iOS:

  1. Führen Sie git clone https://github.com/googlemaps-samples/maps-sdk-for-ios-samples.git aus, um das Beispiel-Repository in ein lokales Verzeichnis zu klonen.
  2. Öffnen Sie ein Terminalfenster, rufen Sie das Verzeichnis auf, in das Sie die Beispieldateien geklont haben, und wechseln Sie zum Verzeichnis „GoogleMaps“:

    Swift

    cd maps-sdk-for-ios-samples-main/GoogleMaps-Swift
    pod install
    open GoogleMapsSwiftDemos.xcworkspace

    Objective-C

    cd maps-sdk-for-ios-samples-main/GoogleMaps
    pod install
    open GoogleMapsDemos.xcworkspace
  3. Klicken Sie in Xcode auf die Schaltfläche „Kompilieren“, um die App mit dem aktuellen Schema zu erstellen. Beim Build wird ein Fehler ausgegeben, der Sie auffordert, Ihren API-Schlüssel in die Datei SDKConstants.swift für Swift oder SDKDemoAPIKey.h für Objective-C einzugeben.
  4. Wenn Sie noch keinen API-Schlüssel haben, folgen Sie der Anleitung, um ein Projekt in der Google Cloud Console einzurichten und einen API-Schlüssel zu erhalten. Wenn Sie den Schlüssel in der Cloud Console konfigurieren, können Sie ihn auf die Bundle-ID der Beispiel-App beschränken, damit nur Ihre App ihn verwenden kann. Die Standard-Bundle-ID der SDK-Beispielanwendung ist com.example.GoogleMapsDemos.
  5. Bearbeite die SDKConstants.swift-Datei für Swift oder die SDKDemoAPIKey.h-Datei für Objective-C und füge deinen API-Schlüssel in die Definition der Konstante apiKey oder kAPIKey ein. Beispiel:

    Swift

    static let apiKey = "YOUR_API_KEY"

    Objective-C

    static NSString *const kAPIKey = @"YOUR_API_KEY";
  6. Entfernen Sie in der Datei SDKConstants.swift (Swift) oder SDKDemoAPIKey.h (Objective-C) die folgende Zeile, da sie zum Registrieren des benutzerdefinierten Problems verwendet wird:

    Swift

    #error (Register for API Key and insert here. Then delete this line.)

    Objective-C

    #error Register for API Key and insert here.
  7. Erstellen Sie das Projekt und führen Sie es aus. Das Fenster des iOS-Simulators wird angezeigt. Es enthält eine Liste der Maps SDK-Demos.
  8. Wählen Sie eine der angezeigten Optionen aus, um eine Funktion des Maps SDK for iOS zu testen.
  9. Wenn Sie aufgefordert werden, GoogleMapsDemos Zugriff auf Ihren Standort zu gewähren, wählen Sie Zulassen aus.