Hi,
ich quäle mich da grad etwas rum:
Ich erstelle in meiner iPhone-App unter anderem auch Karten. Davon benötige ich ein png-File.
Die Karte will ich aber nicht anzeigen lassen. Das soll im Hintergrund passieren.
Bild erstellen aus der MapView funktioniert. Wird auch gespeichert und ist sogar was drin.
Nur leider immer unvollständig.
Sicher hat da schon jemand Erfahrung. An was könnte es liegen?
Ist das ein Layerproblem? Oder Timing?
Das Bild erstelle ich so:
Alles anzeigen
und hier erstelle ich die Map:
Alles anzeigen
ich quäle mich da grad etwas rum:
Ich erstelle in meiner iPhone-App unter anderem auch Karten. Davon benötige ich ein png-File.
Die Karte will ich aber nicht anzeigen lassen. Das soll im Hintergrund passieren.
Bild erstellen aus der MapView funktioniert. Wird auch gespeichert und ist sogar was drin.
Nur leider immer unvollständig.
Sicher hat da schon jemand Erfahrung. An was könnte es liegen?
Ist das ein Layerproblem? Oder Timing?
Das Bild erstelle ich so:
Quellcode
- - (void)buildMapImage
- {
- MKMapView *mapView = self.buildMap;
- UIGraphicsBeginImageContext(mapView.frame.size);
- [mapView.layer renderInContext:UIGraphicsGetCurrentContext()];
- UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
- UIGraphicsEndImageContext();
- // hier wird das Bild gespeichert, das funktioniert
- }
und hier erstelle ich die Map:
Quellcode
- - (MKMapView *)buildMap
- {
- MKMapView *mapView = [[MKMapView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 250.0f, 250.0f)];
- mapView.delegate = self;
- mapView.showsUserLocation = YES;
- CLLocationCoordinate2D MittelPunktDrivingRange;
- MittelPunktDrivingRange.latitude = 51.1614019310332;
- MittelPunktDrivingRange.longitude= 6.72118663787842;
- // max und min Koordinaten ermitteln damit alle Objekte angezeigt werden
- MRAppDelegate *app_min_max = [[UIApplication sharedApplication] delegate];
- CLLocationCoordinate2D maxWest = CLLocationCoordinate2DMake(0.0, 999.0);
- CLLocationCoordinate2D maxOst = CLLocationCoordinate2DMake(0.0, -999.0);
- CLLocationCoordinate2D maxNord = CLLocationCoordinate2DMake(-999.0, 0.0);
- CLLocationCoordinate2D maxSued = CLLocationCoordinate2DMake(999.0, 0.0);
- for (int i = 0; i < [[app_min_max currentRange] numberOfMarkers]; i++)
- {
- CLLocation *markerLocation = [[app_min_max currentRange] markerLocationAtIndex:i];
- MKPointAnnotation *marker = [[MKPointAnnotation alloc] init];
- marker.coordinate = markerLocation.coordinate;
- if(marker.coordinate.longitude < maxWest.longitude)
- {
- maxWest = marker.coordinate;
- }
- if(marker.coordinate.longitude > maxOst.longitude)
- {
- maxOst = marker.coordinate;
- }
- if(marker.coordinate.latitude > maxNord.latitude)
- {
- maxNord = marker.coordinate;
- }
- if(marker.coordinate.latitude < maxSued.latitude)
- {
- maxSued = marker.coordinate;
- }
- }
- CLLocationDegrees midLongitude = (maxWest.longitude + maxOst.longitude)/2.0;
- CLLocationDegrees midLatitude = (maxWest.latitude + maxOst.latitude)/2.0;
- MittelPunktDrivingRange.longitude = midLongitude;
- MittelPunktDrivingRange.latitude= midLatitude;
- CLLocation *maxWestMarker = [[CLLocation alloc] initWithLatitude:maxNord.latitude longitude:maxWest.longitude];
- CLLocation *maxOstMarker = [[CLLocation alloc] initWithLatitude:maxNord.latitude longitude:maxOst.longitude];
- CLLocationDistance breite = [maxWestMarker distanceFromLocation:maxOstMarker];
- CLLocation *maxNordMarker = [[CLLocation alloc] initWithLatitude:maxNord.latitude longitude:maxWest.longitude];
- CLLocation *maxSuedMarker = [[CLLocation alloc] initWithLatitude:maxSued.latitude longitude:maxOst.longitude];
- CLLocationDistance laenge = [maxNordMarker distanceFromLocation:maxSuedMarker];
- MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(MittelPunktDrivingRange, breite,laenge);
- MKCoordinateRegion adjustedRegion = [mapView regionThatFits:viewRegion];
- [mapView setRegion:adjustedRegion animated:YES];
- mapView.mapType = MKMapTypeSatellite;
- MRAppDelegate *app = [[UIApplication sharedApplication] delegate];
- for (int i = 0; i < [[app currentRange] numberOfMarkers]; i++)
- {
- CLLocation *markerLocation = [[app currentRange] markerLocationAtIndex:i];
- NSString *markerName = [[app currentRange] markerNameAtIndex:i];
- MKPointAnnotation *marker = [[MKPointAnnotation alloc] init];
- marker.coordinate = markerLocation.coordinate;
- marker.title = markerName;
- [mapView addAnnotation:marker];
- }
- return (mapView);
- }
Ich habe auch keine Loesung, aber ich bewundere das Problem!
_____________________________________________________
Hape42
_____________________________________________________
Hape42