İşaretçiler

Platform seçin: Android iOS JavaScript

İşaretçiler haritada tek tek konumları gösterir.

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

İşaretçi üzerindeki tıklama etkinliğine yanıt olarak, bir bilgi penceresi açabilirsiniz. Bir bilgi penceresinde, işaretçinin üzerindeki bir iletişim penceresinde metin veya resim görüntülenir. Metin görüntülemek için varsayılan bir bilgi penceresi kullanabilir veya içeriğin tamamını 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 map öğesini ayarlayın.

Aşağıdaki örnekte, mevcut bir GMSMapView nesnesine işaretçi ekleme işlemi gösterilmektedir. İşaretçi 10,10 koordinatlarında oluşturulur ve tıklandığında bir bilgi penceresinde "Merhaba dünya" dizesini görüntüler.

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 şekilde ayarlayarak haritaya yeni işaretçilerin eklenmesini animasyon haline getirebilirsiniz:

  • kGMSMarkerAnimationPop değerini alır.groundAnchor
  • kGMSMarkerAnimationFadeIn ekleyin.

İşaretçiyi kaldırma

GMSMarker öğesinin map özelliğini nil olarak ayarlayarak bir işaretçiyi haritadan kaldırabilirsiniz. Alternatif olarak, GMSMapView clear yöntemini çağırarak şu anda haritada bulunan tüm bindirmeleri (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 elinizde tuttuğunuzdan emin olun. Bu nesnede değişiklik yaparak daha sonra 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

markerImageWithColor: ile varsayılan simgenin tonlanmış bir sürümünü isteyerek ve elde edilen resmi GMSMarker simgesinin simge ö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.

İşaretçinin icon özelliğini kullanma

Aşağıdaki snippet, icon özelliğinde UIImage olarak sağlanan özel simgeyle bir işaretçi oluşturur. Simgenin merkezinde Londra, İngiltere yer alır. 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 birkaç işaretçi oluşturuyorsanız işaretçilerin her biri için aynı UIImage örneğini kullanın. Bu, uygulamanızın çok sayıda işaretçi görüntülerken performansını iyileştirmeye yardımcı olur.

Bu resimde birden fazla çerçeve olabilir. Buna ek olarak, alignmentRectInsets özelliği dikkate alınır. Bu özellik, bir işaretçinin gölgesi veya kullanılamaz başka bir bölgesi varsa yararlıdır.

İşaretçinin iconView özelliğini kullanma

Aşağıdaki snippet, iconView özelliğini ayarlayarak özel simge içeren bir işaretçi oluşturur 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ğinden, işaretçilerinizi tanımlayan standart kullanıcı arayüzü denetimlerinden oluşan bir hiyerarşi oluşturabilirsiniz. Bu hiyerarşi, her görünüm standart animasyon yeteneklerine sahiptir. İşaretçi boyutu, rengi ve alfa seviyelerinde değişiklikler ekleyebilir ve rastgele dönüşümler uygulayabilirsiniz. iconView özelliği, frame ve center hariç UIView öğesinin tüm animasyonlu özelliklerinin animasyonunu destekler.

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

  • tracksViewChanges, YES olarak ayarlandığında UIView kaynak kullanımını zorunlu kılabilir. Bu da pil kullanımının artmasına neden olabilir. Buna karşılık, tek bir kare (UIImage) statiktir ve yeniden oluşturulması gerekmez.
  • Ekranda çok sayıda işaretçi varsa, her işaretçinin kendi UIView'si varsa ve tüm işaretçiler değişiklikleri aynı anda 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, 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üşümler/kaymalar izlenir ve uygulanır. Kısacası, alt görüntülemeler görünümde 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ıyla karşılaştırarak değerlendirmelisiniz. Örneğin:

  • Bir dizi değişiklik yapmanız gerekiyorsa özelliği YES ve ardından tekrar NO olarak değiştirebilirsiniz.
  • Bir animasyon çalışırken veya içerikler eşzamansız olarak yüklenirken, işlemler tamamlanana kadar özelliği YES değerine ayarlanmış olarak tutmalısınız.

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

Bir işaretçinin opaklığını opacity özelliğiyle kontrol edebilirsiniz. Şeffaflığı, 0,0 tamamen şeffaf ve 1 tamamen opak olmak üzere 0,0 ile 1,0 arasında bir hareketli değer olarak belirtmeniz gerekir.

Swift

marker.opacity = 0.6
      

Objective-C

marker.opacity = 0.6;
      

GMSMarkerLayer kullanarak [Core Animation]Core Animasyon ile işaretçi opaklığını etkinleştirebilirsiniz.

İşaretçiyi düzleştirme

İşaretçi simgeleri, normalde haritanın yüzeyine değil, cihazın ekranına bakacak şekilde çizilir. Dolayısıyla, haritayı döndürmek, eğmek veya yakınlaştırmak işaretçinin yönünü değiştirmez.

İşaretçinin yönünü dünyaya göre düz olacak şekilde ayarlayabilirsiniz. Harita döndürüldüğünde düz işaretçiler döner ve harita yatırıldığında perspektifi değiştirir. Normal işaretçilerde olduğu gibi, harita yakınlaştırıldığında veya uzaklaştırıldığında düz işaretçilerin 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 özelliğini ayarlayarak bir işaretçiyi sabitleme noktası etrafında döndürebilirsiniz. Döndürmeyi, varsayılan konumdan saat yönünde derece olarak ö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 değerine ayarlanması, işaretçinin tabanı yerine kendi merkezi çevresinde 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

Haritada, kullanıcının bir işaretçiye dokunması gibi gerçekleşen etkinlikleri dinleyebilirsiniz. Etkinlikleri dinlemek için GMSMapViewDelegate protokolünü uygulamanız gerekir. Belirli işaretçi etkinliklerini nasıl yöneteceğinizi öğrenmek için işaretçi etkinliklerine ve hareketlere bakın. Etkinlik kılavuzu, GMSMapViewDelegate'deki yöntemlerin bir listesini de sağlar. Street View etkinlikleri için bkz. GMSPanoramaViewDelegate.