İşaretçiler

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
Platform seçin: Android iOS JavaScript

İşaretçiler haritada tek konumlar belirtir.

Varsayılan olarak, işaretçiler ortak Google Haritalar görünümüne ve tarzına sahip standart bir simge kullanır. İşaretçinizi özelleştirmek istiyorsanız varsayılan işaretçinin rengini veya işaretçi resmini özel bir simgeyle değiştirebilir ya da işaretçinin diğer özelliklerini değiştirebilirsiniz.

İşaretçideki bir tıklama etkinliğine yanıt olarak, bir bilgi penceresi açabilirsiniz. Bilgi penceresinde, işaretçinin üzerindeki bir pop-up pencerede metin veya resim görüntülenir. Metni görüntülemek için varsayılan bir bilgi penceresi kullanabilir veya içeriğini tamamen kontrol etmek için kendi özel bilgi pencerenizi oluşturabilirsiniz.

İşaretçi ekleme

İşaretçi eklemek için position ve title içeren bir GMSMarker nesnesi oluşturun ve bu map öğesini ayarlayın.

Aşağıdaki örnekte, mevcut bir GMSMapView nesnesine nasıl işaretleyici ekleneceği gösterilmektedir. İşaretçi, 10,10 koordinatlarında oluşturulur ve tıklandığında bir bilgi penceresinde "Merhaba dünya" dizesini gösterir.

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;
      

marker.appearAnimation özelliğini aşağıdaki gibi ayarlayarak haritaya yeni işaretçi ekleme animasyonu yapabilirsiniz:

  • İşaretçinin, eklendiğinde groundAnchor öğesinden çıkmasına neden olacak kGMSMarkerAnimationPop.
  • kGMSMarkerAnimationFadeIn ise işaretçinin yavaşça kaybolmasını sağlar.

İşaretçiyi kaldırma

GMSMarker öğesinin map özelliğini nil olarak ayarlayarak işaretçiyi haritadan kaldırabilirsiniz. Alternatif olarak, GMSMapView clear yöntemini çağırarak haritadaki mevcut tüm yer paylaşımlarını (işaretçiler dahil) kaldırabilirsiniz.

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];
      

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

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

Varsayılan simgenin tonunu markerImageWithColor: ile değiştirerek ve elde edilen resmi GMSMarker simgesi özelliğine ileterek varsayılan işaretçi resminin rengini özelleştirebilirsiniz.

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 isterseniz işaretçinin icon veya iconView özelliğini kullanarak özel bir simge ayarlayabilirsiniz.

iconView ayarlanırsa API, icon özelliğini yoksayar. iconView politikası ayarlandığı sürece mevcut icon için yapılan güncellemeler tanınmaz.

İşaretçinin `icon` özelliğini kullanma

Aşağıdaki snippet'te, icon özelliğinde UIImage olarak sağlanan özel bir simge ile işaretçi bulunmaktadır. Simge, İngiltere'nin Londra şehrindedir. Snippet, uygulamanızın "house.png" adlı bir resim 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ı resimle birden çok işaretçi oluşturuyorsanız işaretçilerin her biri için aynı UIImage örneğini kullanın. Bu yöntem, çok sayıda işaretçi görüntülenirken uygulamanızın performansını iyileştirmeye yardımcı olur.

Bu resimde birden çok çerçeve olabilir. Buna ek olarak, alignmentRectInsets özelliğine saygı gösterilir. Bu özellik, işaretçinin gölgesi veya kullanılamayan başka bir bölgesi varsa yararlıdır.

İşaretçinin `iconView` özelliğini kullanma

Aşağıdaki snippet, işaretçinin iconView özelliğini ayarlayarak özel simgeli bir işaretçi oluşturur ve işaretçinin rengindeki bir değişikliği canlandırır. Snippet, uygulamanızın "house.png" adlı bir resim 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 bir UIView kabul ettiğinden, işaretçilerinizi tanımlayan standart kullanıcı arayüzü kontrollerinden oluşan bir hiyerarşiye sahip olabilirsiniz. Her görünümde standart animasyon özellikleri grubu bulunur. İşaretçi boyutu, rengi ve alfa düzeylerinde değişiklikler yapabilir ve rastgele dönüşümler uygulayabilirsiniz. iconView özelliği, UIView ve frame ile center dışındaki tüm animasyon özelliklerinin animasyonunu destekler.

iconView kullanırken lütfen aşağıdaki noktaları göz önünde bulundurun:

  • tracksViewChanges, YES olarak ayarlandığında UIView kaynakları talep ediyor olabilir. Bu da pil kullanımının artmasına neden olabilir. Buna karşılık, tek bir UIImage çerçevesi statiktir ve yeniden oluşturulması gerekmez.
  • Ekranda çok sayıda işaretçi varsa bazı işaretlemeleri, her işaretçinin kendi UIView öğesi varsa ve tüm işaretçiler aynı anda izleme değişikliklerini izliyorsa bazı cihazlar haritayı oluşturmakta zorlanabilir.
  • iconView, görünümün anlık görüntüsü olduğundan kullanıcı etkileşimine yanıt vermez.
  • Görünüm, gerçek değerinden bağımsız olarak clipsToBounds öğesi YES olarak ayarlanmış gibi davranır. Sınırların dışında çalışan dönüşümler uygulayabilirsiniz ancak çizdiğiniz nesne, nesnenin sınırları dahilinde olmalıdır. Tüm dönüşümler/Vardiyalar izlenir ve uygulanır. Kısacası, alt görünümler görünüm içinde yer almalıdır.

tracksViewChanges özelliğinin ne zaman ayarlanacağına karar vermek için performans değerlendirmelerini, işaretçinin otomatik olarak yeniden çizilmesinin avantajlarına göre değerlendirmeniz gerekir. Örneğin:

  • Yapacağınız bir dizi değişiklik varsa mülkü YES yerine NO olarak değiştirebilirsiniz.
  • Bir animasyon çalışırken veya içerik eşzamansız olarak yüklenirken, işlemler tamamlanana kadar özelliği YES değerine ayarlamanız gerekir.

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

İşaretçinin opaklığını opacity özelliğiyle kontrol edebilirsiniz. Opaklığı 0,0 ile 1,0 arasında bir hareketli değer olarak (0 tamamen şeffaf, 1 tamamen opak) belirtmeniz gerekir.

Swift

marker.opacity = 0.6
      

Objective-C

marker.opacity = 0.6;
      

İşaretçi opaklığını Temel Animasyon ile GMSMarkerLayer üzerinden canlandırabilirsiniz.

İşaretçiyi düzleştirme

İşaretçi simgeleri normalde cihazın yüzeyine değil, harita ekranına doğru çizilir

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

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

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 sabit noktasının çevresinde döndürebilirsiniz. Rotasyonu, varsayılan konumdan saat yönünde derece cinsinden ölçülen bir CLLocationDegrees türü olarak belirtin. İşaretçi haritada düz olduğunda, varsayılan konum kuzeydir.

Aşağıdaki örnek, işaretçiyi 90° döndürür. groundAnchor özelliğinin 0.5,0.5 olarak ayarlanması, işaretçinin tabanı yerine kendi etrafında döndürülmesine neden olur.

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çilerde etkinlikleri işleme

Haritada gerçekleşen etkinlikleri (ör. kullanıcı bir işaretçiye dokunduğunda) dinleyebilirsiniz. Etkinlikleri dinlemek için GMSMapViewDelegate protokolünü uygulamanız gerekir. GMSMapViewDelegate adresindeki etkinlikler kılavuzunu ve yöntem listesini inceleyin. Street View etkinlikleri için GMSPanoramaViewDelegateya bakın.