İşaretler 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 bir bilgi penceresi açabilirsiniz. Bilgi penceresi, işaretçinin üzerindeki bir iletişim kutusunda 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ç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 nasıl işaret 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ü şu şekilde ayarlayarak haritaya yeni işaretçilerin eklenmesini animasyonlu hale getirebilirsiniz:
kGMSMarkerAnimationPop
, işaretçi eklendiğindegroundAnchor
konumundan pop-up olarak görünmesini sağlar.kGMSMarkerAnimationFadeIn
, işaretçi eklendiğinde yavaşça görünmesini sağlar.
İşaretçi 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ş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 işaretçide değişiklik yapmak istiyorsanız GMSMarker
nesnesini tutmaya devam edin. 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 simgenin markerImageWithColor:
ile renkli bir sürümünü isteyip elde edilen resmi GMSMarker
'un 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
mülkünü kullanarak özel bir simge ayarlayabilirsiniz. iconView
ayarlanmışsa API, icon
mülkünü yoksayar.
İşaretçinin icon
mülkünü kullanma
Aşağıdaki snippet, icon
mülkünde UIImage
olarak sağlanan özel bir simgeyle bir işaretçi oluşturur. Simge, İngiltere'nin Londra kentinde merkezlenmiştir. snippet, uygulamanızda "house.png" adlı bir resim bulunduğu varsayıyor.
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 işaretçilerin her biri için aynı UIImage
örneğini kullanın. Bu, birçok işaretçi gösterilirken uygulamanızın performansını artırmanıza 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 kullanılamayan başka bir 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, 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şiniz olabilir. 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
dışındaki 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ığındaUIView
, kaynaklar açısından talepkar olabilir ve bu da pil kullanımının artmasına neden olabilir. Buna karşılık tek kareUIImage
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üntülemenin anlık görüntüsüdür ve kullanıcı etkileşimine yanıt vermez.- Görüntü, 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/değişiklik işlemleri izlenir ve uygulanır. Özetlemek gerekirse: alt görünümler görünüm 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ırmalısınız. Ö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
mülküyle kontrol edebilirsiniz. Opaklığı 0,0 ile 1,0 arasında bir kayan nokta olarak belirtmeniz gerekir. Bu değerde 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.
İşaretçinin yönünü, yeryüzüne 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. Düz işaretçiler, normal işaretçiler gibi 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
mülkünü 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. Döndürme işlemini, varsayılan konumdan saat yönünde derece cinsinden ölçülen bir CLLocationDegrees
türü olarak belirtin. İşaretçi harita üzerinde düz olduğunda varsayılan konum kuzeydir.
Aşağıdaki örnekte işaretçi 90° döndürülür. groundAnchor
mülkü 0.5,0.5
değerine ayarlandığında işaretçi, tabanı yerine ortasından döndürülür.
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 kılavuzunda GMSMapViewDelegate'daki yöntemlerin listesi de sağlanır. Street View etkinlikleri için GMSPanoramaViewDelegate
bölümüne bakın.