programlı bir MKMapView büyüt

oy
23

Ben kullanıyorum MKMapViewbir iPhone uygulaması açıkken. Bir düğmeyi tıkladığınızda yakınlaştırma düzeyi artmalıdır. Bu benim ilk yaklaşımdır:

MKCoordinateRegion zoomIn = mapView.region;
zoomIn.span.latitudeDelta *= 0.5;
[mapView setRegion:zoomIn animated:YES];

Ben longitudeDelta değerini güncellemek etmedi Ancak, bu kod, hiçbir etkisi olmadı. Bu yüzden bu satırı eklendi:

zoomIn.span.longitudeDelta *= 0.5;

Şimdi ama sadece bazen çalışır. latitudeDeltaVe longitudeDeltaaynı şekilde değişmez, yani, kendi değerleri orantılı değildir. bunu nasıl çözeceğimize dair bir fikri olan?

Oluştur 23/06/2009 saat 11:37
kaynak kullanıcı
Diğer dillerde...                            


9 cevaplar

oy
27

Bunu yapmanın doğru yolu ise hiçbir fikrim yok, ama ben ve uzaklaştırmak için bu kullanıyorum.

        case 0: { // Zoom In
        //NSLog(@"Zoom - IN");
        MKCoordinateRegion region;
        //Set Zoom level using Span
        MKCoordinateSpan span;  
        region.center=mapView.region.center;

        span.latitudeDelta=mapView.region.span.latitudeDelta /2.0002;
        span.longitudeDelta=mapView.region.span.longitudeDelta /2.0002;
        region.span=span;
        [mapView setRegion:region animated:TRUE];
    }
        break;

    // Zoom Out 
    case 2: {
        //NSLog(@"Zoom - OUT");
        MKCoordinateRegion region;
        //Set Zoom level using Span
        MKCoordinateSpan span;  
        region.center=mapView.region.center;
        span.latitudeDelta=mapView.region.span.latitudeDelta *2;
        span.longitudeDelta=mapView.region.span.longitudeDelta *2;
        region.span=span;
        [mapView setRegion:region animated:TRUE];
    }
Cevap 29/07/2009 saat 14:58
kaynak kullanıcı

oy
21

Sadece dkdarel cevabını temizlik

// delta is the zoom factor
// 2 will zoom out x2
// .5 will zoom in by x2
- (void)zoomMap:(MKMapView*)mapView byDelta:(float) delta {

    MKCoordinateRegion region = mapView.region;
    MKCoordinateSpan span = mapView.region.span;
    span.latitudeDelta*=delta;
    span.longitudeDelta*=delta;
    region.span=span;
    [mapView setRegion:region animated:YES];

}

Swift kodu:

func zoomMap(byFactor delta: Double) {
    var region: MKCoordinateRegion = self.mapView.region
    var span: MKCoordinateSpan = mapView.region.span
    span.latitudeDelta *= delta
    span.longitudeDelta *= delta
    region.span = span
    mapView.setRegion(region, animated: true)
}
Cevap 21/11/2013 saat 19:43
kaynak kullanıcı

oy
21

İşte daha kolay bir çözümdür:

MKUserLocation *userLocation = mapView.userLocation;
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance (
      userLocation.location.coordinate, 50, 50);
[mapView setRegion:region animated:NO];
Cevap 28/11/2012 saat 18:40
kaynak kullanıcı

oy
2

Sadece Swift için dkardel en çözümünü tercüme:

@IBAction func zoomOutButtonClicked(sender: UIButton) {
    let span = MKCoordinateSpan(latitudeDelta: mapView.region.span.latitudeDelta*2, longitudeDelta: mapView.region.span.longitudeDelta*2)
    let region = MKCoordinateRegion(center: mapView.region.center, span: span)

    mapView.setRegion(region, animated: true)
}

@IBAction func zoomInButtonClicked(sender: UIButton) {
    let span = MKCoordinateSpan(latitudeDelta: mapView.region.span.latitudeDelta/2, longitudeDelta: mapView.region.span.longitudeDelta/2)
    let region = MKCoordinateRegion(center: mapView.region.center, span: span)

    mapView.setRegion(region, animated: true)
}
Cevap 31/03/2015 saat 08:43
kaynak kullanıcı

oy
2

İşte açıklama noktasına haritayı taşı ve buna oldukça yakın yakınlaştırmak için benim yoludur. Kolayca doğrultusunda zoom değiştirebilirCGFloat newLatDelta = 0.06f;

- (void)moveMapToAnnotation:(MKPointAnnotation*)annotation
{
    CGFloat fractionLatLon = map.region.span.latitudeDelta / map.region.span.longitudeDelta;
    CGFloat newLatDelta = 0.06f;
    CGFloat newLonDelta = newLatDelta * fractionLatLon;
    MKCoordinateRegion region = MKCoordinateRegionMake(annotation.coordinate, MKCoordinateSpanMake(newLatDelta, newLonDelta));
    [map setRegion:region animated:YES];
}
Cevap 01/04/2014 saat 11:57
kaynak kullanıcı

oy
1

mapView.setRegion Haritanız döndürüldüğünde yöntem sorunu var

Sen aracılığıyla haritayı yakınlaştırabilir mapView.camera.altitudemülkiyet, ancak animasyonlu değildir:

mapView.camera.altitude *= 1.05

Yeni kamera nesnesi oluşturmak ve animasyon ile ayarlayabilirsiniz:

let currentCamera = mapView.camera
let newCamera: MKMapCamera
if #available(iOS 9.0, *) {
    newCamera = MKMapCamera(lookingAtCenter: currentCamera.centerCoordinate, fromDistance: currentCamera.altitude * 2, pitch: currentCamera.pitch, heading: currentCamera.heading)
} else {
    newCamera = MKMapCamera()
    newCamera.centerCoordinate = currentCamera.centerCoordinate
    newCamera.heading = currentCamera.heading
    newCamera.altitude = currentCamera.altitude * 2
    newCamera.pitch = currentCamera.pitch
}

mapView.setCamera(newCamera, animated: true)
Cevap 17/05/2017 saat 12:33
kaynak kullanıcı

oy
1
- (IBAction)btnZoomInPressed
{
    MKCoordinateRegion region;
    MKCoordinateSpan span;
    region.center.latitude = lati;
    region.center.longitude = longi;
    span.latitudeDelta=viewMapSingleVenue.region.span.latitudeDelta /2.0002;
    span.longitudeDelta=viewMapSingleVenue.region.span.longitudeDelta /2.0002;
    region.span=span;
    [viewMapSingleVenue setRegion:region animated:TRUE];
}

- (IBAction)btnZoomOutPressed
{
    MKCoordinateRegion region;
    MKCoordinateSpan span;
    region.center.latitude = lati;
    region.center.longitude = longi;
    span.latitudeDelta=viewMapSingleVenue.region.span.latitudeDelta *2;
    span.longitudeDelta=viewMapSingleVenue.region.span.longitudeDelta *2;
    if(span.latitudeDelta < 200)
    {
    region.span=span;
    [viewMapSingleVenue setRegion:region animated:TRUE];
    }
}
Cevap 20/02/2015 saat 13:56
kaynak kullanıcı

oy
1

Ben sizinkine benzer kodu kullanabilirsiniz ve iş gibi görünüyor. Ne oluyor olabilir delta zum seviyesi sonraki bir google yakınlaştırma seviyesinden artmaya neden olacak kadar değişen olmamasıdır. Bu aynı zamanda aralıklı neden açıklayabilir haritanızın başlangıç ​​durumuna, bağlı olacağı - yani kullanıcı yakınlaştırma düğmeye basan önce, harita ve yakınlaştırma düzeyini yukarı ile başlayacak nasıl?

Ayrıca (Elma dokümanlar kullanışlı yok gibi adı bellekten olan) sağlamak bölgeyi ayarlayacaktır regionThatFits yöntem haline görünebilir.

Cevap 23/06/2009 saat 13:16
kaynak kullanıcı

oy
0

Swift 4.2

let location = mapView.userLocation
let region = MKCoordinateRegion(center: location.coordinate, span: MKCoordinateSpan(latitudeDelta: 50, longitudeDelta: 50))
mapView.setRegion(region, animated: true)
Cevap 22/03/2019 saat 12:02
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more