Pregunta

Saludos,

Estoy tratando de dibujar un círculo en un mapa. Todas las piezas separadas de este proyecto funcionan de forma independiente, pero cuando las pongo todas juntas se rompe.

Configuré mi interfaz de usuario en mi viewDidLoad, conservando la mayor parte.

Luego uso eventos táctiles para llamar a mi método de actualización de mapa:

-(void)refreshMap{

NSString *thePath = [NSString stringWithFormat:@"http://maps.google.com/staticmap?center=%f,%f&zoom=%i&size=640x640&maptype=hybrid",viewLatitude, viewLongitude, zoom];
NSURL *url = [NSURL URLWithString:thePath];
NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *mapImage = [[UIImage alloc] initWithData:data];

mapImage = [self addCircle:(mapImage) influence:(70) latCon:(320) lonCon:(320)];
NSLog(@"-- mapimageview retaincount %i",[mapImage retainCount]);    

mapImageView.image = mapImage;
[mapImage release];}

Una configuración como esta cargará el mapa con un círculo una vez, pero si el mapa se actualiza nuevamente se bloquea.

Si comento el lanzamiento de mapImage, funciona repetidamente pero causa una pérdida de memoria.

El método addCircle que estoy usando:

-(UIImage *)addCircle:(UIImage *)img radius:(CGFloat)radius latCon:(CGFloat)lat lonCon:(CGFloat)lon{
int w = img.size.width;
int h = img.size.height; 
lon = h - lon;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 4 * w, colorSpace, kCGImageAlphaPremultipliedFirst);

//draw the circle
CGContextDrawImage(context, CGRectMake(0, 0, w, h), img.CGImage);
CGRect leftOval = {lat- radius/2, lon - radius/2, radius, radius};
CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 0.3);
CGContextAddEllipseInRect(context, leftOval);
CGContextFillPath(context);

CGImageRef imageMasked = CGBitmapContextCreateImage(context);
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);

return [UIImage imageWithCGImage:imageMasked];}

¡Cualquier idea / consejo es muy apreciada!

¿Fue útil?

Solución

UIImage *mapImage = [[UIImage alloc] initWithData:data];
mapImage = [self addCircle:(mapImage) influence:(70) latCon:(320) lonCon:(320)];

Eso no es bueno. Está perdiendo la referencia al contenido de mapImage cuando lo reasigna en la segunda línea. La forma más fácil de solucionar esto es si probablemente solo agregue una variable adicional, para que pueda realizar un seguimiento de ambas imágenes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top