İşaretçiler, haritada tek konumları belirtir.
Varsayılan olarak, işaretçiler ortak Google Haritalar görünümü 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.
Bir işaretçideki tıklama etkinliğine yanıt olarak bir bilgi penceresi açabilirsiniz. Bilgi penceresinde, işaretçinin üzerindeki iletişim penceresinde metin veya resimler görüntülenir. 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çi 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 işaretçinin nasıl ekleneceği 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
ekleyin.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];
Bir işaretçiyi haritaya ekledikten sonra üzerinde değişiklik yapmak isterseniz GMSMarker
nesnesini elinizde tuttuğunuzdan emin olun. Daha sonra bu nesnede değişiklikler
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
markerImageWithColor:
ile varsayılan simgenin tonlanmış bir sürümünü isteyerek ve ortaya çıkan 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 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'nin merkezi 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, birçok işaretçi görüntülerken uygulamanızın performansını iyileştirmeye yardımcı olur.
Bu resimde birden fazla çerçeve olabilir. Ayrıca, alignmentRectInsets
özelliğine uyulur. Bu, işaretçinin gölgesi veya kullanılamaz olduğu başka bir bölge 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 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
öğesi UIView
kabul ettiğinden, işaretçilerinizi tanımlayan standart kullanıcı arayüzü denetimleri hiyerarşisinden yararlanabilirsiniz. Her görünümde, standart animasyon özellikleri bulunur. Rastgele dönüşümler uygulamanın yanı sıra işaretçi boyutu, rengi ve alfa seviyelerinde değişiklikler ekleyebilirsiniz. iconView
özelliği, frame
ve center
hariç tüm canlandırmalı UIView
özelliklerinin animasyonunu destekler.
iconView
kullanırken aşağıdaki noktaları göz önünde bulundurun:
tracksViewChanges
,YES
olarak ayarlandığındaUIView
, kaynak talep edebilir. Bu da pil kullanımının artmasına neden olabilir. Buna karşılık tek birUIImage
karesi statiktir ve yeniden oluşturulması gerekmez.- Ekranda çok sayıda işaretçiniz varsa ve her işaretçinin kendi
UIView
işareti varsa bazı cihazlar haritayı oluşturmakta zorlanabilir. Tüm işaretçiler de değişiklikleri aynı anda izliyor. 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ümün içinde bulunmalı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ğerlendirmeniz gerekir. Örneğin:
- Yapacağınız bir dizi değişiklik varsa özelliği
YES
olarak değiştirip tekrarNO
yapabilirsiniz. - Bir animasyon çalışırken veya içerikler eşzamansız olarak yüklenirken, işlemler tamamlanana kadar özelliği
YES
değerine ayarlamalısınız.
İşaretçi opaklığını değiştirme
Bir işaretçinin opaklığını, opacity
özelliğiyle kontrol edebilirsiniz. Şeffaflığı, 0,0 ile 1,0 arasında (0, tamamen şeffaf, 1 tamamen opak) bir kayan nokta olarak belirtmeniz gerekir.
Swift
marker.opacity = 0.6
Objective-C
marker.opacity = 0.6;
İşaretçi opaklığını GMSMarkerLayer
kullanarak [Temel Animasyon]Temel Animasyon ile canlandırabilirsiniz.
İşaretçiyi düzleştirme
İşaretçi simgeleri normalde haritanın yüzeyine değil, cihazın ekranına bakacak şekilde çizilir. Bu nedenle, haritayı döndürmek, yatırmak veya yakınlaştırmak işaretçinin yönünü mutlaka değiştirmez.
İşaretçinin yönünü dünyaya göre 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, 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ının çevresinde döndürebilirsiniz. Döndürmeyi, varsayılan konumdan saat yönünde ölçülen bir CLLocationDegrees
türü olarak belirtin. İşaretçi harita üzerinde düz olduğunda
varsayılan konum Kuzey olur.
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 gerçekleşen etkinlikleri (örneğin, bir kullanıcının işaretçiye dokunması) 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 etkinliklerini ve hareketlerini inceleyin. Etkinlik kılavuzu'nda, GMSMapView şunları da içeren yöntemlerin listesi de sunulmaktadır: Street View etkinlikleri için bkz.
GMSPanoramaViewDelegate
.