İşaretçiler, haritadaki tek konumları gösterir.
Varsayılan olarak işaretçiler, Google Haritalar'ın genel görünümüne sahip standart bir simge kullanı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.
Bir işaretçideki tıklama etkinliğine yanıt olarak bilgi penceresi açabilirsiniz. Bilgi penceresi, işaretçinin üzerindeki bir iletişim kutusunda metin veya resimler 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çi ekleme
İşaretçi eklemek için position
ve title
içeren bir GMSMarker
nesnesi oluşturun ve map
özelliğini 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 bilgi penceresinde "Hello world" 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 değerlere ayarlayarak haritaya yeni işaretçi eklenmesini canlandırabilirsiniz:
kGMSMarkerAnimationPop
, işaretçinin eklendiğindegroundAnchor
konumundan çıkmasına neden olur.- İşaretçinin eklendiğinde görünmesini sağlamak için
kGMSMarkerAnimationFadeIn
.
İşaretçiyi kaldırma
map
özelliğini nil
olarak ayarlayarak haritadan bir işaretçi kaldırabilirsiniz.GMSMarker
Alternatif olarak, GMSMapView
clear
yöntemini çağırarak haritada 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];
Haritaya eklediğiniz bir işaretçide değişiklik yapmak istiyorsanız GMSMarker
nesnesini 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
Varsayılan işaretçi resminin rengini, varsayılan simgenin markerImageWithColor:
ile renkli bir sürümünü isteyerek ve sonuçtaki resmi GMSMarker
öğesinin simge özelliğine ileterek ö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
ayarlanmışsa API, icon
özelliğini yok sayar.
İşaretçinin icon
özelliğini kullanma
Aşağıdaki snippet, icon
özelliğinde UIImage
olarak sağlanan özel simgeye sahip bir işaretçi oluşturur. Simge, İngiltere'nin Londra şehrinde ortalanmıştır. Bu snippet, uygulamanızda "house.png" adlı bir resim olduğunu 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ı resmi kullanarak 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, işaretçinin gölgesi veya başka bir kullanılamaz bölgesi varsa yararlı olan alignmentRectInsets
özelliği de dikkate alınır.
İşaretçinin iconView
özelliğini kullanma
Aşağıdaki snippet, işaretçinin iconView
özelliği ayarlanarak özel simgeye sahip bir işaretçi oluşturur ve işaretçinin rengindeki değişikliği canlandırır.
Snippet, uygulamanızda "house.png" adlı bir resim olduğunu 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ü denetimlerinin hiyerarşisini oluşturabilirsiniz. Her görünümde standart animasyon özellikleri bulunur. İşaretçi boyutu, rengi ve alfa düzeylerinde değişiklik yapabilir, ayrıca rastgele dönüşümler uygulayabilirsiniz. iconView
özelliği, frame
ve center
hariç olmak üzere UIView
öğesinin tüm animasyonlu özelliklerinin animasyonunu destekler.
iconView
özelliğini kullanırken lütfen aşağıdaki hususları göz önünde bulundurun:
tracksViewChanges
,YES
olarak ayarlandığındaUIView
kaynakları zorlayabilir ve bu durum pil kullanımının artmasına neden olabilir. Buna karşılık, tek bir kareUIImage
statiktir ve yeniden oluşturulması gerekmez.- Ekranda çok sayıda işaretçi varsa ve her işaretçinin kendi
UIView
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ü olduğundan kullanıcı etkileşimine yanıt vermez.- Görünüm, gerçek değerinden bağımsız olarak
clipsToBounds
değeriYES
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üşümler/kaydırmalar izlenir ve uygulanır. Kısaca: Alt görünümler, görünüm içinde yer almalıdır. GMSMarker
üzerinde-copyWithZone:
kullanmak için önceGMSMarker
kopyalamanız, ardından kopyada yeni biriconView
örneği oluşturmanız gerekir.UIView
,NSCopying
çözünürlüğünü desteklemediği içiniconView
kopyalanamıyor.
tracksViewChanges
özelliğini ne zaman ayarlayacağınıza karar verirken 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 tekrarNO
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
ö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 Core Animation ile işaretçi opaklığını canlandırabilirsiniz.
İşaretçiyi düzleştirme
İşaretçi simgeleri normalde haritanın yüzeyi yerine cihazın ekranına göre yönlendirilmiş şekilde çizilir. Bu nedenle, haritayı döndürmek, eğmek veya yakınlaştırmak işaretçinin yönünü mutlaka değiştirmez.
Bir işaretçinin yönünü yere paralel olacak şekilde ayarlayabilirsiniz. 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çi döndürme
rotation
özelliğini ayarlayarak bir işaretçiyi sabitleme noktası etrafında döndürebilirsiniz. Dönüşü, varsayılan konumdan saat yönünde derece cinsinden ölçülen bir CLLocationDegrees
türü olarak belirtin. İşaretçi haritada düz durduğunda varsayılan konum kuzeydir.
Aşağıdaki örnekte işaretçi 90° döndürülüyor. groundAnchor
özelliğinin 0.5,0.5
olarak ayarlanması, işaretçinin tabanı yerine merkezi 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
Kullanıcının işaretçiye dokunması gibi haritada gerçekleşen etkinlikleri dinleyebilirsiniz. Etkinlikleri dinlemek için GMSMapViewDelegate
protokolünü uygulamanız gerekir. Belirli işaretleyici etkinliklerini nasıl işleyeceğinizi öğrenmek için İşaretleyici etkinlikleri ve hareketler başlıklı makaleyi inceleyin. Etkinliklerle ilgili kılavuzda GMSMapViewDelegate'teki yöntemlerin listesi de yer alır. Street View etkinlikleri için GMSPanoramaViewDelegate
başlıklı makaleyi inceleyin.