Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu kılavuzda oluşturacağımız uygulama aşağıda gösterilmiştir:
Yeni bir iOS Boş Projesi oluşturup ilgili bir ad vererek başlayalım. MapView'u görüntülemek için Görünüm Denetleyicimize kod ekleyerek başlayacağız ve ardından MapDelegate için yeni sınıflar ve özel ek açıklamalar oluşturacağız. Bunu başarmak için aşağıdaki adımları izleyin:
ViewController
aşağıdaki ad alanlarını içine
ViewControllerekleyin:using MapKit; using CoreLocation; using UIKit using CoreGraphicsSınıfına bir
MKMapViewörnek değişkeni ile birlikte birMapDelegateörnek değişkeni ekleyin. Kısa süre sonraMapDelegateoluşturacağız:public partial class ViewController : UIViewController { MKMapView map; MapDelegate mapDelegate; ...Denetleyicinin
LoadViewyönteminde birMKMapViewekleyin ve denetleyicininViewözelliğine ayarlayın:public override void LoadView () { map = new MKMapView (UIScreen.MainScreen.Bounds); View = map; }Ardından, 'ViewDidLoad'' yönteminde eşlemeyi başlatmak için kod ekleyeceğiz.
Harita türünü ayarlamak için kod ekle bölümünde
ViewDidLoadkullanıcı konumunu gösterin ve yakınlaştırma ve kaydırmaya izin verin:// change map type, show user location and allow zooming and panning map.MapType = MKMapType.Standard; map.ShowsUserLocation = true; map.ZoomEnabled = true; map.ScrollEnabled = true;Ardından haritayı ortalamak ve bölge olarak ayarlamak için kod ekleyin:
double lat = 30.2652233534254; double lon = -97.73815460962083; CLLocationCoordinate2D mapCenter = new CLLocationCoordinate2D (lat, lon); MKCoordinateRegion mapRegion = MKCoordinateRegion.FromDistance (mapCenter, 100, 100); map.CenterCoordinate = mapCenter; map.Region = mapRegion;öğesinin
MapDelegateyeni bir örneğini oluşturun ve öğesininDelegateöğesine atayınMKMapView. Yine kısa süre sonra şunlarıMapDelegateuygulayacağız:mapDelegate = new MapDelegate (); map.Delegate = mapDelegate;iOS 8'den itibaren, kullanıcınızdan konumunu kullanması için yetkilendirme istemeniz gerekir, bu nedenle bunu örneğimize ekleyelim. İlk olarak, sınıf düzeyinde bir
CLLocationManagerdeğişken tanımlayın:CLLocationManager locationManager = new CLLocationManager();yönteminde
ViewDidLoad, uygulamayı çalıştıran cihazın iOS 8 kullanıp kullanmadığını denetlemek istiyoruz ve bu durumda uygulama kullanımdayken yetkilendirme isteğinde bulunacağız:if (UIDevice.CurrentDevice.CheckSystemVersion(8,0)){ locationManager.RequestWhenInUseAuthorization (); }Son olarak, kullanıcılara konumlarını isteme nedenini bildirmek için Info.plist dosyasını düzenlememiz gerekir. Info.plist dosyasının Kaynak menüsünde aşağıdaki anahtarı ekleyin:
NSLocationWhenInUseUsageDescriptionve dizesi:
Maps Walkthrough Docs Sample.
ConferenceAnnotation.cs – Özel Ek Açıklamalar için bir sınıf
ek açıklama için adlı
ConferenceAnnotationözel bir sınıf kullanacağız. Aşağıdaki sınıfı projeye ekleyin:using System; using CoreLocation; using MapKit; namespace MapsWalkthrough { public class ConferenceAnnotation : MKAnnotation { string title; CLLocationCoordinate2D coord; public ConferenceAnnotation (string title, CLLocationCoordinate2D coord) { this.title = title; this.coord = coord; } public override string Title { get { return title; } } public override CLLocationCoordinate2D Coordinate { get { return coord; } } } }
ViewController - Ek açıklama ve katman ekleme
ConferenceAnnotationYerine yerleştirdikten sonra haritaya ekleyebiliriz. yöntemineViewDidLoadViewControllergeri dönün ve ek açıklamayı haritanın merkezi koordinatında ekleyin:map.AddAnnotations (new ConferenceAnnotation ("Evolve Conference", mapCenter));Ayrıca otelin yer paylaşımını da yapmak istiyoruz. Sağlanan otelin koordinatlarını kullanarak oluşturmak
MKPolygoniçin aşağıdaki kodu ekleyin ve çağrısıylaAddOverlayharitaya ekleyin:// add an overlay of the hotel MKPolygon hotelOverlay = MKPolygon.FromCoordinates( new CLLocationCoordinate2D[]{ new CLLocationCoordinate2D(30.2649977168594, -97.73863627705), new CLLocationCoordinate2D(30.2648461170005, -97.7381627734755), new CLLocationCoordinate2D(30.2648355402574, -97.7381750192576), new CLLocationCoordinate2D(30.2647791309417, -97.7379872505988), new CLLocationCoordinate2D(30.2654525150319, -97.7377341711021), new CLLocationCoordinate2D(30.2654807195004, -97.7377994819399), new CLLocationCoordinate2D(30.2655089239607, -97.7377994819399), new CLLocationCoordinate2D(30.2656428950368, -97.738346460207), new CLLocationCoordinate2D(30.2650364981811, -97.7385709662122), new CLLocationCoordinate2D(30.2650470749025, -97.7386199493406) }); map.AddOverlay (hotelOverlay);
Bu işlem içindeki ViewDidLoadkodu tamamlar. Şimdi sırasıyla ek açıklama ve katman görünümlerini oluşturmayı işlemek için sınıfımızı uygulamamız MapDelegate gerekiyor.
MapDelegate
öğesinden
MKMapViewDelegatedevralan ve ek açıklama için yeniden kullanım tanımlayıcısı olarak kullanılacak birannotationIddeğişken içeren adlıMapDelegatebir sınıf oluşturun:class MapDelegate : MKMapViewDelegate { static string annotationId = "ConferenceAnnotation"; ... }Burada yalnızca bir ek açıklamamız olduğundan yeniden kullanım kodu kesinlikle gerekli değildir, ancak bu kodu eklemek iyi bir uygulamadır.
Bu kılavuzda
GetViewForAnnotationyer alan conference.png görüntüsünü kullanarak görünümü döndürmek içinConferenceAnnotationyöntemini uygulayın:public override MKAnnotationView GetViewForAnnotation (MKMapView mapView, NSObject annotation) { MKAnnotationView annotationView = null; if (annotation is MKUserLocation) return null; if (annotation is ConferenceAnnotation) { // show conference annotation annotationView = mapView.DequeueReusableAnnotation (annotationId); if (annotationView == null) annotationView = new MKAnnotationView (annotation, annotationId); annotationView.Image = UIImage.FromFile ("images/conference.png"); annotationView.CanShowCallout = true; } return annotationView; }Kullanıcı ek açıklamaya dokunduğunda Austin şehrini gösteren bir görüntü görüntülemek istiyoruz. Görüntü için ve görüntülemek için görünümüne aşağıdaki değişkenleri
MapDelegateekleyin:UIImageView venueView; UIImage venueImage;Ardından, ek açıklamaya dokunulduğunda görüntüyü göstermek için yöntemini aşağıdaki gibi uygulayın
DidSelectAnnotation:public override void DidSelectAnnotationView (MKMapView mapView, MKAnnotationView view) { // show an image view when the conference annotation view is selected if (view.Annotation is ConferenceAnnotation) { venueView = new UIImageView (); venueView.ContentMode = UIViewContentMode.ScaleAspectFit; venueImage = UIImage.FromFile ("image/venue.png"); venueView.Image = venueImage; view.AddSubview (venueView); UIView.Animate (0.4, () => { venueView.Frame = new CGRect (-75, -75, 200, 200); }); } }Kullanıcı haritada başka bir yere dokunarak ek açıklamanın seçimini kaldırdığında görüntüyü gizlemek için yöntemini aşağıdaki gibi uygulayın
DidDeselectAnnotationView:public override void DidDeselectAnnotationView (MKMapView mapView, MKAnnotationView view) { // remove the image view when the conference annotation is deselected if (view.Annotation is ConferenceAnnotation) { venueView.RemoveFromSuperview (); venueView.Dispose (); venueView = null; } }Artık ek açıklamanın kodu hazır. Geriye kalan tek şey, otel katmanının görünümünü oluşturmak için öğesine kod
MapDelegateeklemektir.aşağıdaki uygulamasını
GetViewForOverlayiçineMapDelegateekleyin:public override MKOverlayView GetViewForOverlay (MKMapView mapView, NSObject overlay) { // return a view for the polygon MKPolygon polygon = overlay as MKPolygon; MKPolygonView polygonView = new MKPolygonView (polygon); polygonView.FillColor = UIColor.Blue; polygonView.StrokeColor = UIColor.Red; return polygonView; }
Uygulamayı çalıştırın. Artık özel ek açıklama ve katman içeren etkileşimli bir haritamız var! Aşağıda gösterildiği gibi ek açıklamaya dokunduğunda Austin görüntüsü görüntülenir:
Özet
Bu makalede haritaya ek açıklama eklemeyi ve belirtilen çokgen için katman eklemeyi inceledik. Ayrıca bir görüntüye harita üzerinden animasyon eklemek için ek açıklamaya dokunma desteği eklemeyi de gösterdik.

