İşaretçiler

Platform seçin: Android iOS JavaScript

İşaretçiler haritada tek bir konumu belirtir.

İşaretçiler varsayılan olarak, ortak Google Haritalar görünümüne ve hissettirir. İşaretçinizi özelleştirmek isterseniz işaretçinizin rengini değiştirebilirsiniz. veya işaretçi resmini özel bir simgeyle değiştirin ya da özellikleri inceleyelim.

Bir işaretçideki tıklama etkinliğine yanıt olarak bilgi bilgisini penceresi) tıklayın. İletişim penceresinde metin veya resim gösteren bilgi penceresi tıklayın. Metni görüntülemek için varsayılan bir bilgi penceresi kullanabilir veya kendi özel bilgi pencerenizi kullanarak, içeriğini tamamen kontrol edebilirsiniz.

İşaretçi ekleme

İşaretçi eklemek için position ve içeren bir GMSMarker nesnesi oluşturun title ve map olarak ayarlandı.

Aşağıdaki örnekte mevcut bir GMSMapView nesne algılandı. İşaretçi 10,10 koordinatlarında oluşturulur ve "Hello World" dizesi bir bilgi penceresi içinde görünür.

Swift

let position = CLLocationCoordinate2D(latitude: 10, longitude: 10)
let marker = GMSMarker(position: position)
marker.title = "Hello World"
marker.map = mapView
      

Objective-C

CLLocationCoordinate2D position = CLLocationCoordinate2DMake(10, 10);
GMSMarker *marker = [GMSMarker markerWithPosition:position];
marker.title = @"Hello World";
marker.map = mapView;
      

Haritaya yeni işaretçiler eklemek için marker.appearAnimation mülkü:

  • İşaretçinin groundAnchor konumundan çıkması için kGMSMarkerAnimationPop eklenir.
  • kGMSMarkerAnimationFadeIn simgesine dokunun.

İşaretçiyi kaldırma

Haritanın map özelliğini ayarlayarak işaretçiyi haritadan kaldırabilirsiniz. GMSMarker - nil. Alternatif olarak tüm yer paylaşımlarını GMSMapView clear numaralı telefonu arayarak şu anda haritada (işaretçiler dahil) yöntemidir.

Swift

let camera = GMSCameraPosition.camera(
  withLatitude: -33.8683,
  longitude: 151.2086,
  zoom: 6
)
let mapView = GMSMapView.map(withFrame: .zero, camera: camera)
// ...
mapView.clear()
      

Objective-C

GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.8683
                                                        longitude:151.2086
                                                             zoom:6];
mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
// ...
[mapView clear];
      

Bir işaretçiyi haritaya ekledikten sonra üzerinde değişiklik yapmak isterseniz, GMSMarker nesnesini tuttuğunuzdan emin olun. İşaretçiyi değiştirebilirsiniz. daha sonra bu nesnede değişiklik yapabilirsiniz.

Swift

let position = CLLocationCoordinate2D(latitude: 10, longitude: 10)
let marker = GMSMarker(position: position)
marker.map = mapView
// ...
marker.map = nil
      

Objective-C

CLLocationCoordinate2D position = CLLocationCoordinate2DMake(10, 10);
GMSMarker *marker = [GMSMarker markerWithPosition:position];
marker.map = mapView;
// ...
marker.map = nil;
      

İşaretçi rengini değiştirme

Tonlamalı bir etiket isteyerek varsayılan işaretçi resminin rengini özelleştirebilirsiniz. varsayılan simgenin sürümünü markerImageWithColor: ile birlikte kullanmak ve oluşturulan resim, GMSMarker simge özelliğine uygulanır.

Swift

marker.icon = GMSMarker.markerImage(with: .black)
      

Objective-C

marker.icon = [GMSMarker markerImageWithColor:[UIColor blackColor]];
      

İşaretçi resmini özelleştirme

Varsayılan işaretçi resmini değiştirmek istiyorsanız, aşağıdakileri kullanarak özel bir simge ayarlayabilirsiniz: işaretçinin icon veya iconView özelliğini değiştirir. iconView ayarlanmışsa API icon özelliğini yoksayar.

İşaretçinin icon özelliği kullanılıyor

Aşağıdaki snippet, icon özelliğinde UIImage. Simgenin merkezinde Londra, İngiltere yer alır. İlgili içeriği oluşturmak için kullanılan snippet'i, uygulamanızın "house.png" adlı bir görüntü içerdiğini varsayar.

Swift

let positionLondon = CLLocationCoordinate2D(latitude: 51.5, longitude: -0.127)
let london = GMSMarker(position: positionLondon)
london.title = "London"
london.icon = UIImage(named: "house")
london.map = mapView
      

Objective-C

CLLocationCoordinate2D positionLondon = CLLocationCoordinate2DMake(51.5, -0.127);
GMSMarker *london = [GMSMarker markerWithPosition:positionLondon];
london.title = @"London";
london.icon = [UIImage imageNamed:@"house"];
london.map = mapView;
      

Aynı görüntüyle birkaç işaretçi oluşturuyorsanız aynı örneği kullanın UIImage işaretinden her biri için. Bu da pek çok işaretçi gösterilir.

Bu resimde birden fazla kare olabilir. Ayrıca, alignmentRectInsets Bu, işaretçide gölge veya başka tür unsurların bulunması durumunda kullanışlıdır mevcut olmayan bölgeler.

İşaretçinin iconView özelliği kullanılıyor

Aşağıdaki snippet, iconView özelliğini ekler ve işaretçinin rengindeki değişikliği canlandırır. Snippet, uygulamanızın "house.png" adlı bir görüntü içerdiğini varsayar.

Swift

import CoreLocation
import GoogleMaps

class MarkerViewController: UIViewController, GMSMapViewDelegate {
  var mapView: GMSMapView!
  var london: GMSMarker?
  var londonView: UIImageView?

  override func viewDidLoad() {
    super.viewDidLoad()

    let camera = GMSCameraPosition.camera(
      withLatitude: 51.5,
      longitude: -0.127,
      zoom: 14
    )
    let mapView = GMSMapView.map(withFrame: .zero, camera: camera)
    view = mapView

    mapView.delegate = self

    let house = UIImage(named: "House")!.withRenderingMode(.alwaysTemplate)
    let markerView = UIImageView(image: house)
    markerView.tintColor = .red
    londonView = markerView

    let position = CLLocationCoordinate2D(latitude: 51.5, longitude: -0.127)
    let marker = GMSMarker(position: position)
    marker.title = "London"
    marker.iconView = markerView
    marker.tracksViewChanges = true
    marker.map = mapView
    london = marker
  }

  func mapView(_ mapView: GMSMapView, idleAt position: GMSCameraPosition) {
    UIView.animate(withDuration: 5.0, animations: { () -> Void in
      self.londonView?.tintColor = .blue
    }, completion: {(finished) in
      // Stop tracking view changes to allow CPU to idle.
      self.london?.tracksViewChanges = false
    })
  }
}
      

Objective-C

@import CoreLocation;
@import GoogleMaps;

@interface MarkerViewController : UIViewController <GMSMapViewDelegate>
@property (strong, nonatomic) GMSMapView *mapView;
@end

@implementation MarkerViewController {
  GMSMarker *_london;
  UIImageView *_londonView;
}

- (void)viewDidLoad {
  [super viewDidLoad];

  GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:51.5
                                                          longitude:-0.127
                                                               zoom:14];
  _mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
  self.view = _mapView;

  _mapView.delegate = self;

  UIImage *house = [UIImage imageNamed:@"House"];
  house = [house imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
  _londonView = [[UIImageView alloc] initWithImage:house];
  _londonView.tintColor = [UIColor redColor];

  CLLocationCoordinate2D position = CLLocationCoordinate2DMake(51.5, -0.127);
  _london = [GMSMarker markerWithPosition:position];
  _london.title = @"London";
  _london.iconView = _londonView;
  _london.tracksViewChanges = YES;
  _london.map = self.mapView;
}

- (void)mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)position {
  [UIView animateWithDuration:5.0
                   animations:^{
    self->_londonView.tintColor = [UIColor blueColor];
  }
                   completion:^(BOOL finished) {
    // Stop tracking view changes to allow CPU to idle.
    self->_london.tracksViewChanges = NO;
  }];
}

@end
      

iconView, UIView kabul ettiği için standart kullanıcı arayüzü hiyerarşiniz olabilir işaretçilerinizi tanımlayan kontrol düğmeleri ve her görünümde standart animasyon özellikler. İşaretçi boyutu, rengi ve alfasında değişiklikler yapabilirsiniz. rastgele dönüştürmeleri uygulayabilirsiniz. iconView mülkü frame ve hariç olmak üzere UIView öğesinin tüm animasyona uygun özelliklerinin animasyonunu destekler center.

iconView kullanırken aşağıdaki noktalara dikkat edin:

  • tracksViewChanges ayarlandığında UIView, kaynakları talep ediyor olabilir YES olarak ayarlayacağım. Bu durum pil kullanımının artmasına neden olabilir. Buna karşılık, tek kare UIImage statiktir ve yeniden oluşturulması gerekmez.
  • Çok sayıda işaretçiniz varsa bazı cihazlar haritayı görüntülemekte zorlanabilir ve her işaretçinin kendine ait UIView özelliği var ve tüm işaretçiler olduğunu unutmayın.
  • iconView, kullanıcının etkileşimine yanıt vermez ve görünüm.
  • Görünüm, clipsToBounds özelliği ne olursa olsun YES değerine ayarlanmış gibi davranır gerçek değerdir. Sınırların dışında çalışan dönüştürmeler uygulayabilirsiniz ancak çizdiğiniz nesne, nesnenin sınırları içinde olmalıdır. Tümü dönüşümler/kaymalar izlenir ve uygulanır. Kısacası, alt izlenme sayısı: bilgi girin.

tracksViewChanges özelliğinin ne zaman ayarlanacağına karar vermek için ağırlıklandırmanız gerekir. işaretçiyi yeniden çizmenin avantajlarıyla ilgili performans değerlendirmeleri otomatik olarak oluşturur. Örneğin:

  • Yapılacak bir dizi değişiklik varsa özelliği YES, ardından NO konumuna geri dönün.
  • Bir animasyon çalışırken veya içerikler yüklenirken eşzamansız olarak, işlemler yapılana kadar özelliği YES değerine ayarlı tutmalısınız tamamlandı.

İşaretçi opaklığını değiştirme

Bir işaretçinin opaklığını opacity özelliğiyle kontrol edebilirsiniz. Şunları yapmalısınız: opaklığı 0,0 ve 1,0 arasında bir kayan noktalı olarak belirtin; burada 0, tamamen şeffaftır ve 1 değeri tamamen opaktır.

Swift

marker.opacity = 0.6
      

Objective-C

marker.opacity = 0.6;
      

İşaretçi opaklığını [Core Animation]ile canlandırabilirsiniz. Animasyon ile GMSMarkerLayer.

İşaretçiyi düzeltme

İşaretçi simgeleri normal şartlarda değil, cihazın ekranına dayalı olarak çizilir. haritayı döndürmek, yatırmak veya yakınlaştırmak zorunda kalmak zorunda değilsiniz, işaretçinin yönünü değiştirin.

İşaretçinin yönünü dünya üzerinde düz olacak şekilde ayarlayabilirsiniz. Düz Harita döndürüldüğünde işaretçiler döner ve harita döndürüldüğünde perspektifi yatırıldı. Normal işaretçilerde olduğu gibi, harita işaretleyici üzerinde çalışırken düz işaretçiler de boyutlarını korur yakınlaştırın veya uzaklaştırın.

İşaretçinin yönünü değiştirmek için flat özelliğini YES veya true.

Swift

let positionLondon = CLLocationCoordinate2D(latitude: 51.5, longitude: -0.127)
let londonMarker = GMSMarker(position: positionLondon)
londonMarker.isFlat = true
londonMarker.map = mapView
      

Objective-C

CLLocationCoordinate2D positionLondon = CLLocationCoordinate2DMake(51.5, -0.127);
GMSMarker *londonMarker = [GMSMarker markerWithPosition:positionLondon];
londonMarker.flat = YES;
londonMarker.map = mapView;
      

İşaretçiyi döndürme

rotation özelliğini ayarlayarak bir işaretçiyi sabitleme noktası etrafında döndürebilirsiniz. Rotasyonu bir CLLocationDegrees türü olarak belirtin. derece döndürür. İşaretçi haritada düz durduğunda varsayılan konum Kuzey'dir.

Aşağıdaki örnekte işaretçi 90° döndürülür. groundAnchor ayarlanıyor özelliğinin 0.5,0.5 değerine ayarlanması, işaretçinin kendi merkezinde döndürülmesine neden olur. ile başlayalım.

Swift

let degrees = 90.0
londonMarker.groundAnchor = CGPoint(x: 0.5, y: 0.5)
londonMarker.rotation = degrees
londonMarker.map = mapView
      

Objective-C

CLLocationDegrees degrees = 90;
londonMarker.groundAnchor = CGPointMake(0.5, 0.5);
londonMarker.rotation = degrees;
londonMarker.map = mapView;
      

İşaretçilerdeki etkinlikleri işleme

Haritada gerçekleşen etkinlikleri (örneğin, bir kullanıcının bir ekrana dokunması gibi) dinleyebilirsiniz kullanabilirsiniz. Etkinlikleri dinlemek için GMSMapViewDelegate protokolü. İşaretleme etkinlikleri ve hareketlerle belirli işaretçi etkinlikleri. Etkinlik rehberinde aşağıdaki bilgilerin yer aldığı bir liste de mevcuttur: yöntemleri hakkında daha fazla bilgi edinin. Street View etkinlikleri için bkz. GMSPanoramaViewDelegate.