İşaretçiler haritada tek bir konumu belirtir.
İşaretçiler varsayılan olarak, ortak Google Haritalar görünümüne ve hissettirir. İşaretçinizi özelleştirmek isterseniz işaretçinizin rengini değiştirebilirsiniz. veya işaretçi resmini özel bir simgeyle değiştirin ya da özellikleri inceleyelim.
Bir işaretçideki tıklama etkinliğine yanıt olarak bilgi bilgisini penceresi) tıklayın. İletişim penceresinde metin veya resim gösteren bilgi penceresi tıklayın. Metni görüntülemek için varsayılan bir bilgi penceresi kullanabilir veya kendi özel bilgi pencerenizi kullanarak, içeriğini tamamen kontrol edebilirsiniz.
İşaretçi ekleme
İşaretçi eklemek için position
ve içeren bir GMSMarker
nesnesi oluşturun
title
ve map
olarak ayarlandı.
Aşağıdaki örnekte mevcut bir
GMSMapView
nesne algılandı. İş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;
Haritaya yeni işaretçiler eklemek için
marker.appearAnimation
mülkü:
- İşaretçinin
groundAnchor
konumundan çıkması içinkGMSMarkerAnimationPop
eklenir. kGMSMarkerAnimationFadeIn
simgesine dokunun.
İşaretçiyi kaldırma
Haritanın map
özelliğini ayarlayarak işaretçiyi haritadan kaldırabilirsiniz.
GMSMarker
- nil
. Alternatif olarak tüm yer paylaşımlarını
GMSMapView
clear
numaralı telefonu arayarak şu anda haritada (işaretçiler dahil)
yöntemidir.
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 tuttuğunuzdan emin olun. İşaretçiyi değiştirebilirsiniz.
daha sonra bu nesnede değişiklik yapabilirsiniz.
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
Tonlamalı bir etiket isteyerek varsayılan işaretçi resminin rengini özelleştirebilirsiniz.
varsayılan simgenin sürümünü markerImageWithColor:
ile birlikte kullanmak ve
oluşturulan resim, GMSMarker
simge özelliğine uygulanır.
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, aşağıdakileri kullanarak özel bir simge ayarlayabilirsiniz:
işaretçinin icon
veya iconView
özelliğini değiştirir. iconView
ayarlanmışsa API
icon
özelliğini yoksayar.
İşaretçinin icon
özelliği kullanılıyor
Aşağıdaki snippet,
icon
özelliğinde UIImage
. Simgenin merkezinde Londra, İngiltere yer alır. İlgili içeriği oluşturmak için kullanılan
snippet'i, 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 birkaç işaretçi oluşturuyorsanız aynı örneği kullanın
UIImage
işaretinden her biri için. Bu da
pek çok işaretçi gösterilir.
Bu resimde birden fazla kare olabilir. Ayrıca, alignmentRectInsets
Bu, işaretçide gölge veya başka tür unsurların bulunması durumunda kullanışlıdır
mevcut olmayan bölgeler.
İşaretçinin iconView
özelliğini kullanma
Aşağıdaki snippet,
işaretleyicinin iconView
özelliğini ekler 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ği için standart kullanıcı arayüzü hiyerarşiniz olabilir
işaretçilerinizi tanımlayan kontrol düğmeleri ve her görünümde standart animasyon
özellikler. İşaretçi boyutu, rengi ve alfasında değişiklikler yapabilirsiniz.
rastgele dönüştürmeleri uygulayabilirsiniz. iconView
mülkü
frame
ve hariç olmak üzere UIView
öğesinin tüm animasyona uygun özelliklerinin animasyonunu destekler
center
.
iconView
kullanırken aşağıdaki noktalara dikkat edin:
tracksViewChanges
ayarlandığındaUIView
, kaynakları talep ediyor olabilirYES
olarak ayarlayacağım. Bu durum pil kullanımının artmasına neden olabilir. Buna karşılık, tek kareUIImage
statiktir ve yeniden oluşturulması gerekmez.- Çok sayıda işaretçiniz varsa bazı cihazlar haritayı görüntülemekte zorlanabilir
ve her işaretçinin kendine ait
UIView
özelliği var ve tüm işaretçiler olduğunu unutmayın. iconView
, kullanıcının etkileşimine ilişkin anlık bir görüntü olduğu için görünüm.- Görünüm,
clipsToBounds
özelliği ne olursa olsunYES
değerine ayarlanmış gibi davranır gerçek değerdir. 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 izlenme sayısı: bilgi girin.
tracksViewChanges
özelliğinin ne zaman ayarlanacağına karar vermek için ağırlıklandırmanız gerekir.
işaretçiyi yeniden çizmenin avantajlarıyla ilgili performans değerlendirmeleri
otomatik olarak oluşturur. Örneğin:
- Yapılacak bir dizi değişiklik varsa özelliği
YES
, ardındanNO
konumuna geri dönün. - Bir animasyon çalışırken veya içerikler yüklenirken
eşzamansız olarak, işlemler yapılana kadar özelliği
YES
değerine ayarlı tutmalısınız tamamlandı.
İşaretçi opaklığını değiştirme
Bir işaretçinin opaklığını opacity
özelliğiyle kontrol edebilirsiniz. Şunları yapmalısınız:
opaklığı 0,0 ve 1,0 arasında bir kayan noktalı olarak belirtin; burada 0, tamamen şeffaftır
ve 1 değeri tamamen opaktır.
Swift
marker.opacity = 0.6
Objective-C
marker.opacity = 0.6;
İşaretçi opaklığını [Core Animation]ile canlandırabilirsiniz.
Animasyon ile GMSMarkerLayer
.
İşaretçiyi düzeltme
İş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ü dünya üzerinde düz olacak şekilde ayarlayabilirsiniz. Düz Harita döndürüldüğünde işaretçiler döner ve harita döndürüldüğünde perspektifi eğik. Normal işaretçilerde olduğu gibi, harita işaretleyici üzerinde çalışırken düz işaretçiler de boyutlarını korur yakınlaştırın veya uzaklaştırın.
İşaretçinin yönünü değiştirmek için flat
özelliğini
YES
veya true
.
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.
Rotasyonu bir CLLocationDegrees
türü olarak belirtin.
derece döndürür. İşaretçi haritada düz durduğunda
varsayılan konum Kuzey'dir.
Aşağıdaki örnekte işaretçi 90° döndürülür. groundAnchor
ayarlanıyor
özelliğinin 0.5,0.5
değerine ayarlanması, işaretçinin kendi merkezinde döndürülmesine neden olur.
ile başlayalım.
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 bir ekrana dokunması gibi) dinleyebilirsiniz
kullanabilirsiniz. Etkinlikleri dinlemek için
GMSMapViewDelegate
protokolü. İşaretleme etkinlikleri ve
hareketlerle
belirli işaretçi etkinlikleri. Etkinlik rehberinde aşağıdaki bilgilerin yer aldığı bir liste de mevcuttur:
yöntemleri hakkında daha fazla bilgi edinin. Street View etkinlikleri için bkz.
GMSPanoramaViewDelegate
.