Salutations,Dessin sur UIImage/Problème de mémoire - objectif-c
J'essaie de dessiner un cercle sur une carte. toutes les pièces séparées de ce projet fonctionnent de manière indépendante mais quand je les mets tous ensemble ça casse.
Je configure mon interface utilisateur dans viewDidLoad, en conservant la plus grande partie.
je puis utiliser des événements tactiles pour appeler ma méthode carte de rafraîchissement:
-(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];}
installation comme cela, il va charger la carte avec un cercle une fois, mais si la carte est mise à jour à nouveau, il se bloque.
Si je commente la version de mapImage, cela fonctionne à plusieurs reprises mais provoque une fuite de mémoire.
La méthode AddCircle 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ée!
Merci pour votre réponse! J'ai essayé cette suggestion, j'ai créé une nouvelle UIImage et j'y ai assigné l'image formatée, mais malheureusement je reçois le même résultat, si je ne libère pas la nouvelle image aussi mon application fuit, sinon elle se bloque la 2ème fois par. – Puppet
Mark Bessey était sur la bonne voie: j'ai créé un UIImage temp dans ma méthode addcircle, ce qui me permet de libérer le cgimage et de renvoyer mon UImage formaté. J'ai également créé un nouveau UIImage pour que cela soit retourné dans ma méthode refreshMap. Merci pour l'aide! – Puppet