Domanda

Saluti,

Sto cercando di disegnare un cerchio su una mappa. tutti i pezzi separati di questo progetto funzionano in modo indipendente ma quando li metto insieme si rompe.

Ho impostato la mia interfaccia utente in viewDidLoad, conservandone la maggior parte.

Uso quindi gli eventi touch per chiamare un metodo di aggiornamento della mia mappa:

-(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 configurazione come questa caricherà la mappa con un cerchio una volta, ma se la mappa viene nuovamente aggiornata si arresta in modo anomalo.

Se commento la versione di mapImage funziona ripetutamente ma provoca una perdita di memoria.

Il metodo addCircle che sto 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];}

Qualsiasi approfondimento / consiglio è molto apprezzato!

È stato utile?

Soluzione

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

Non va bene. Stai perdendo il riferimento al contenuto di mapImage quando lo riassegni sulla seconda riga. Il modo più semplice per risolvere questo problema è probabilmente aggiungere semplicemente una variabile aggiuntiva, in modo da poter tenere traccia di entrambe le immagini.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top