Question

Salutations,

J'essaie de dessiner un cercle sur une carte. toutes les parties distinctes de ce projet fonctionnent indépendamment, mais lorsque je les assemble toutes ensemble, cela se casse.

J'ai configuré mon interface utilisateur dans mon viewDidLoad, en en conservant l'essentiel.

J'utilise ensuite les événements tactiles pour appeler une méthode de ma carte d'actualisation:

-(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];}

Une configuration comme celle-ci chargera la carte d’un cercle une fois, mais si la carte est rafraîchie à nouveau, elle se bloque.

Si je commente la version de mapImage, elle fonctionne à plusieurs reprises mais provoque une fuite de mémoire.

La méthode addCircle que j'utilise:

-(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];}

Toute idée / conseil est grandement apprécié!

Était-ce utile?

La solution

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

Ce n'est pas bon. Vous perdez la référence au contenu de mapImage lorsque vous le réaffectez sur la deuxième ligne. Le moyen le plus simple de résoudre ce problème consiste probablement à simplement ajouter une variable supplémentaire afin que vous puissiez suivre les deux images.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top