İşaretçiler

Platform seçin: Android iOS JavaScript

İşaretçiler, haritada tek bir konumu gösterir.

İşaretçilerde varsayılan olarak, Google Haritalar'a özgü bir görünüme ve stile sahip standart bir simge kullanılır. İşaretçinizi özelleştirmek istiyorsanız varsayılan işaretçinin rengini değiştirebilir, işaretçi resmini özel bir simgeyle değiştirebilir veya işaretçinin diğer özelliklerini değiştirebilirsiniz.

İşaretçideki bir tıklama etkinliğine yanıt olarak bilgi penceresi açabilirsiniz. İşaretçinin üzerindeki iletişim kutusunda bilgi penceresi metin veya resim gösterir. Metin 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 ekleme

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

Aşağıdaki örnekte, mevcut bir GMSMapView nesnesine nasıl işaretçi 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 mülkünü aşağıdaki şekilde ayarlayarak haritaya yeni işaretçilerin eklenmesini animasyonlu hale getirebilirsiniz:

  • kGMSMarkerAnimationPop, işaretçi eklendiğinde groundAnchor alanından pop-up olarak görünmesini sağlar.
  • kGMSMarkerAnimationFadeIn, işaretçi eklendiğinde yavaşça görünmesini sağlar.

İşaretçiyi kaldırma

GMSMarker öğesinin map mülkünü nil olarak ayarlayarak işaretçiyi haritadan kaldırabilirsiniz. Alternatif olarak, GMSMapView clear yöntemini çağırarak haritadaki tüm yer paylaşımlarını (işaretler 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];
      

Haritaya ekledikten sonra bir işaretçide değişiklik yapmak istiyorsanız GMSMarker nesnesini elinizde tuttuğunuzdan emin olun. Bu nesnede değişiklik yaparak işaretçiyi daha sonra 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

markerImageWithColor: ile varsayılan simgenin renkli bir sürümünü isteyip elde edilen resmi GMSMarker'un simge mülküne 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 istiyorsanız işaretçinin icon veya iconView özelliğini kullanarak özel bir simge ayarlayabilirsiniz. iconView ayarlanmışsa API, icon özelliğini yoksayar.

İşaretçinin icon mülkünü kullanma

Aşağıdaki snippet, icon mülkünde UIImage olarak sağlanan özel bir simge içeren bir işaretçi oluşturur. Simge, İngiltere'nin Londra şehrinde ortalanmaktadır. Sana Özel snippet'inde, uygulamanızda "house.png" adlı bir resim bulunduğu varsayılır.

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 fazla işaretçi oluşturuyorsanız her işaretçi için aynı UIImage örneğini kullanın. Bu, çok sayıda işaretçi gösterilirken uygulamanızın performansını artırmaya yardımcı olur.

Bu resimde birden fazla kare olabilir. Ayrıca, alignmentRectInsets özelliğine de uyulur. Bu özellik, bir işaretçide gölge veya başka bir kullanılamayan bölge varsa faydalıdır.

İşaretçinin iconView mülkünü kullanma

Aşağıdaki snippet, işaretçinin iconView mülkünü ayarlayarak özel simgeli bir işaretçi oluşturur ve işaretçinin renginde animasyonlu bir değişiklik yapar. Bu snippet'te, uygulamanızda "house.png" adlı bir resim bulunduğu varsayılır.

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 değerini kabul ettiğinden işaretçilerinizi tanımlayan standart kullanıcı arayüzü denetimleri hiyerarşisi oluşturabilirsiniz. Bu hiyerarşinin her görünümü, standart animasyon özelliklerine sahiptir. İşaretçi boyutu, rengi ve alfa düzeylerinde değişiklik yapabilir, ayrıca keyfi dönüşümler uygulayabilirsiniz. iconView mülkü, frame ve center hariç UIView'un tüm animasyonlu özelliklerinin animasyonunu destekler.

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

  • tracksViewChanges YES olarak ayarlandığında UIView kaynakları yoğun şekilde kullanabilir. Bu da pil kullanımında artışa neden olabilir. Buna karşılık tek kare UIImage statiktir ve yeniden oluşturulması gerekmez.
  • Ekranınızda çok sayıda işaretçi varsa ve her işaretçinin kendi UIView değeri varsa ve tüm işaretçiler aynı anda değişiklikleri izliyorsa bazı cihazlar haritayı oluşturmakta zorlanabilir.
  • iconView, görünümün anlık görüntüsüdür ve kullanıcı etkileşimine yanıt vermez.
  • Görüntüleme, gerçek değerinden bağımsız olarak clipsToBounds 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ı içinde olmalıdır. Tüm dönüştürme işlemleri/değişiklikler izlenir ve uygulanır. Özet olarak: alt görünümler görünümün içinde yer almalıdır.

tracksViewChanges mülkünün ne zaman ayarlanacağına karar vermek için performansla ilgili hususları, işaretçinin otomatik olarak yeniden çizilmesinin avantajlarıyla karşılaştırmanız gerekir. Örneğin:

  • Yapmanız gereken bir dizi değişiklik varsa mülkü YES olarak değiştirip tekrar NO olarak ayarlayabilirsiniz.
  • Bir animasyon çalışırken veya içerikler eşzamansız olarak yüklenirken, işlemler tamamlanana kadar özelliği YES olarak ayarlamanız gerekir.

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

İşaretçinin opaklığını opacity mülküyle kontrol edebilirsiniz. Opaklığı 0,0 ile 1,0 arasında bir kayan nokta olarak belirtmeniz gerekir. Bu durumda 0 tamamen şeffaf, 1 ise tamamen opaktır.

Swift

marker.opacity = 0.6
      

Objective-C

marker.opacity = 0.6;
      

İşaretçi opaklığını GMSMarkerLayer kullanarak Core Animation ile animasyonlu hale getirebilirsiniz.

İşaretçiyi düzleştirme

İşaretçi simgeleri normalde haritanın yüzeyine göre değil, cihazın ekranına göre çizilir. Bu nedenle, haritayı döndürmek, eğmek veya yakınlaştırmak, işaretçinin yönünü değiştirmeyebilir.

Bir işaretçiyi, dünya üzerinde düz olacak şekilde yönlendirebilirsiniz. Düz işaretçiler, harita döndürüldüğünde döner ve harita eğildiğinde 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 boyutlarını 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 mülkünü ayarlayarak bir işaretçiyi ankraj noktası etrafında döndürebilirsiniz. Rotasyonu, varsayılan konumdan saat yönünde derece cinsinden ölçülen bir CLLocationDegrees türü olarak belirtin. İşaretçi haritanın düz bir yerindeyken varsayılan konum kuzeydir.

Aşağıdaki örnekte işaretçi 90° döndürülmektedir. groundAnchor mülkünün 0.5,0.5 olarak ayarlanması, işaretçinin tabanı yerine ortasının 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çilerdeki etkinlikleri işleme

Harita üzerinde gerçekleşen etkinlikleri (ör. kullanıcı bir işaretçiye dokunduğunda) dinleyebilirsiniz. Etkinlikleri dinlemek için GMSMapViewDelegate protokolünü uygulamanız gerekir. Belirli işaretçi etkinliklerini nasıl işleyeceğinizi öğrenmek için işaretçi etkinlikleri ve hareketler başlıklı makaleyi inceleyin. Etkinlikler rehberi, GMSMapViewDelegate'daki yöntemlerin listesini de sağlar. Street View etkinlikleri için GMSPanoramaViewDelegate bölümüne bakın.