Aracılığıyla paylaş


Xamarin.iOS'ta Ek Açıklamalar ve Yer Paylaşımları

Bu kılavuzda oluşturacağımız uygulama aşağıda gösterilmiştir:

Örnek bir MapKit uygulaması

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

  1. aşağıdaki ad alanlarını içine ViewControllerekleyin:

    using MapKit;
    using CoreLocation;
    using UIKit
    using CoreGraphics
    
  2. Sınıfına bir MKMapView örnek değişkeni ile birlikte bir MapDelegate örnek değişkeni ekleyin. Kısa süre sonra MapDelegate oluşturacağız:

    public partial class ViewController : UIViewController
    {
        MKMapView map;
        MapDelegate mapDelegate;
        ...
    
  3. Denetleyicinin LoadView yönteminde bir MKMapView ekleyin ve denetleyicinin View ö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.

  4. Harita türünü ayarlamak için kod ekle bölümünde ViewDidLoad kullanı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;
    
    
  5. 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;
    
    
  6. öğesinin MapDelegate yeni bir örneğini oluşturun ve öğesinin Delegate öğesine atayın MKMapView. Yine kısa süre sonra şunları MapDelegate uygulayacağız:

    mapDelegate = new MapDelegate ();
    map.Delegate = mapDelegate;
    
  7. 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 CLLocationManager değişken tanımlayın:

    CLLocationManager locationManager = new CLLocationManager();
    
  8. 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 ();
    }
    
  9. 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:

    NSLocationWhenInUseUsageDescription

    ve dizesi:

    Maps Walkthrough Docs Sample.

ConferenceAnnotation.cs – Özel Ek Açıklamalar için bir sınıf

  1. 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

  1. ConferenceAnnotation Yerine yerleştirdikten sonra haritaya ekleyebiliriz. yöntemine ViewDidLoadViewControllergeri dönün ve ek açıklamayı haritanın merkezi koordinatında ekleyin:

    map.AddAnnotations (new ConferenceAnnotation ("Evolve Conference", mapCenter));
    
  2. Ayrıca otelin yer paylaşımını da yapmak istiyoruz. Sağlanan otelin koordinatlarını kullanarak oluşturmak MKPolygon için aşağıdaki kodu ekleyin ve çağrısıyla AddOverlayharitaya 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

  1. öğesinden MKMapViewDelegate devralan ve ek açıklama için yeniden kullanım tanımlayıcısı olarak kullanılacak bir annotationId değişken içeren adlı MapDelegate bir 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.

  2. Bu kılavuzda GetViewForAnnotation yer alan conference.png görüntüsünü kullanarak görünümü döndürmek için ConferenceAnnotation yö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;
    }
    
  3. 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 MapDelegate ekleyin:

    UIImageView venueView;
    UIImage venueImage;
    
  4. 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); });
        }
    }
    
  5. 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 MapDelegate eklemektir.

  6. aşağıdaki uygulamasını GetViewForOverlay içine MapDelegateekleyin:

    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:

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.