प्रोग्राम के रूप में एक MKMapView में ज़ूम

वोट
23

मैं एक का उपयोग कर रहा MKMapViewएक iPhone app के अंदर। जब मैं एक बटन पर क्लिक करें ज़ूम स्तर को बढ़ाना होगा। यह मेरा पहला दृष्टिकोण है:

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

हालांकि, इस कोड के बाद से मैं longitudeDelta मूल्य को अद्यतन नहीं किया, कोई प्रभाव नहीं पड़ा। इसलिए मैं इस लाइन कहा:

zoomIn.span.longitudeDelta *= 0.5;

अब यह काम करता है, लेकिन केवल कभी कभी। latitudeDeltaऔर longitudeDeltaउसी तरह से नहीं बदलते हैं, मेरा मतलब है, उनके मूल्यों नहीं आनुपातिक हैं। कुछ पता है इसे कैसे हल करना है?

23/06/2009 को 11:37
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


9 जवाब

वोट
27

मैं अगर यह यह करने के लिए सही तरीका है पता नहीं है, लेकिन मैं अंदर और बाहर ज़ूम करने के लिए इस का उपयोग कर रहा हूँ।

        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];
    }
29/07/2009 को 14:58
का स्रोत उपयोगकर्ता

वोट
21

बस dkdarel के जवाब की सफाई

// 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];

}

स्विफ्ट कोड:

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)
}
21/11/2013 को 19:43
का स्रोत उपयोगकर्ता

वोट
21

यहाँ एक आसान उपाय है:

MKUserLocation *userLocation = mapView.userLocation;
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance (
      userLocation.location.coordinate, 50, 50);
[mapView setRegion:region animated:NO];
28/11/2012 को 18:40
का स्रोत उपयोगकर्ता

वोट
2

बस तेजी से करने के लिए dkardel के समाधान अनुवाद:

@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)
}
31/03/2015 को 08:43
का स्रोत उपयोगकर्ता

वोट
2

यहाँ एनोटेशन बात करने के लिए नक्शे को स्थानांतरित और बहुत करीब ज़ूम करने के लिए मेरा तरीका है। आप आसानी से लाइन में ज़ूम बदल सकते हैंCGFloat 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];
}
01/04/2014 को 11:57
का स्रोत उपयोगकर्ता

वोट
1

mapView.setRegion विधि समस्या है जब अपने नक्शे में घुमाया जाता है

आप के माध्यम से ज़ूम कर सकते हैं mapView.camera.altitudeसंपत्ति है, लेकिन यह एनिमेटेड नहीं है:

mapView.camera.altitude *= 1.05

आप नया कैमरा वस्तु बना सकते हैं और एनीमेशन के साथ सेट कर सकते हैं:

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)
17/05/2017 को 12:33
का स्रोत उपयोगकर्ता

वोट
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];
    }
}
20/02/2015 को 13:56
का स्रोत उपयोगकर्ता

वोट
1

मैं आपके जैसा कोड का उपयोग करें और यह काम करने लगता है। क्या हो रहा जा सकता है कि अपने डेल्टा पर्याप्त ज़ूम स्तर अगले करने के लिए एक गूगल ज़ूम स्तर से बढ़ाने के लिए पैदा करने के लिए बदल रहा है नहीं है। यह भी अपने नक्शे की प्रारंभिक अवस्था है, जो समझा सकता है क्यों यह रुक-रुक कर है पर निर्भर करेगा - तो तुम कैसे, सेट करूँ मानचित्र और ज़ूम स्तर के साथ शुरू करने के लिए उपयोगकर्ता से पहले ज़ूम बटन दबाता है?

तुम भी regionThatFits विधि है जो इस क्षेत्र उपलब्ध कराने (नाम के रूप में मैं सेब डॉक्स आसान नहीं है स्मृति से है) को समायोजित करेगा इस पर गौर कर सकता है।

23/06/2009 को 13:16
का स्रोत उपयोगकर्ता

वोट
0

स्विफ्ट 4.2 में

let location = mapView.userLocation
let region = MKCoordinateRegion(center: location.coordinate, span: MKCoordinateSpan(latitudeDelta: 50, longitudeDelta: 50))
mapView.setRegion(region, animated: true)
22/03/2019 को 12:02
का स्रोत उपयोगकर्ता

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