İşaretçiler

Platform seçin: Android iOS JavaScript

İşaretçiler haritada tek bir konumu belirtir.

İşaretçiler varsayılan olarak, Google Haritalar'ın ortak 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 değiştirebilir, işaretçi resmini özel bir simgeyle değiştirebilir veya işaretçinin diğer özelliklerini değiştirebilirsiniz.

Bir işaretçideki tıklama etkinliğine yanıt olarak bir bilgi penceresi açabilirsiniz. Bilgi penceresi, işaretçinin üzerindeki iletişim penceresinde metin veya görseller gösterir. 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 nesnenin map değerini ayarlayın.

Aşağıdaki örnekte, mevcut bir GMSMapView nesnesine işaretçi ekleme gösterilmektedir. İşaretçi 10,10 koordinatlarında oluşturulur ve tıklandığında "Merhaba dünya" dizesini bir bilgi penceresinde 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 şu değere ayarlayarak, haritaya yeni işaretçi ekleme işlemini animasyonla gösterebilirsiniz:

  • kGMSMarkerAnimationPop ekleyerek işaretçinin groundAnchor konumundan görünmesini sağlar.
  • kGMSMarkerAnimationFadeIn simgesine dokunun.

İş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 şu anda harita üzerinde bulunan 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];
      

Bir işaretçiyi haritaya ekledikten sonra üzerinde değişiklik yapmak isterseniz 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 tonlamalı bir sürümünü isteyerek ve elde edilen resmi GMSMarker 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 istiyorsanız 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ği kullanılıyor

Aşağıdaki snippet, icon özelliğinde UIImage olarak sağlanan özel simgeye sahip bir işaretçi oluşturur. Simgenin merkezinde Londra, İngiltere yer alır. Snippet, 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 birden fazla işaretçi oluşturuyorsanız işaretçilerin her biri için aynı UIImage örneğini kullanın. Böylece, birçok işaretçi görüntülenirken uygulamanızın performansı artar.

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

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

Aşağıdaki snippet, işaretçinin 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 bir UIView kabul ettiğinden, işaretçilerinizi tanımlayan bir standart kullanıcı arayüzü kontrolleri hiyerarşiniz olabilir. Her görünümde, standart animasyon özellikleri grubu bulunur. İşaretçi boyutu, rengi ve alfa seviyelerinde değişiklik yapabilir, rastgele dönüşümler uygulayabilirsiniz. iconView özelliği, frame ve center hariç UIView öğesinin tüm canlandırılabilir özelliklerinin animasyonunu destekler.

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

  • tracksViewChanges, YES olarak ayarlandığında UIView, kaynakları zorlayabilir. 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 ve her işaretçinin kendi UIView öğesi varsa ve tüm işaretçiler değişiklikleri aynı anda izliyorsa bazı cihazlar haritayı görüntülemekte 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üştürmeler uygulayabilirsiniz ancak çizdiğiniz nesne, nesnenin sınırları içinde olmalıdır. Tüm dönüştürmeler/kaymalar izlenir ve uygulanır. Kısacası, alt görüntülemeler görünümün içinde yer almalıdır.

tracksViewChanges özelliğinin 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:

  • Yapılacak bir dizi değişiklik varsa ö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 olarak tutmanız gerekir.

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

Bir işaretçinin opaklığını opacity özelliğiyle kontrol edebilirsiniz. Opaklığı 0,0 ile 1,0 arasında bir kayan nokta olarak belirtmeniz gerekir. Burada 0 tamamen şeffaf, 1 ise tamamen opaktır.

Swift

marker.opacity = 0.6
      

Objective-C

marker.opacity = 0.6;
      

GMSMarkerLayer kullanarak [Temel Animasyon]Temel Animasyon ile işaretçi opaklığını canlandırabilirsiniz.

İşaretçiyi düzeltme

İşaretçi simgeleri normalde haritanın yüzeyine değil, cihazın ekranına yönlendirilir. Bu nedenle haritayı döndürmek, yatırmak veya yakınlaştırmak işaretleyicinin yönünün değişmesine gerekmez.

İş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 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 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ının etrafında döndürebilirsiniz. Döndürmeyi bir CLLocationDegrees türü olarak belirtin. Varsayılan konumdan saat yönünde ölçülmüştür. İşaretçi haritada düz durduğunda varsayılan konum Kuzey'dir.

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 merkezinin ç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

Kullanıcının bir işaretçiye dokunması gibi, haritada gerçekleşen etkinlikleri dinleyebilirsiniz. Etkinlikleri dinlemek için GMSMapViewDelegate protokolünü uygulamanız gerekir. Belirli işaretçi etkinliklerinin nasıl işleneceğini öğrenmek için işaretleme etkinlikleri ve hareketler bölümüne bakın. Etkinlik kılavuzunda GMSMapViewDelegate'teki yöntemlerin listesi de yer alır. Street View etkinlikleri için bkz. GMSPanoramaViewDelegate.