بالاعتماد على UIImage / القضية الذاكرة - الهدف جيم

StackOverflow https://stackoverflow.com/questions/653247

  •  19-08-2019
  •  | 
  •  

سؤال

وتحيات،

وأنا أحاول رسم دائرة على الخريطة. كل قطعة منفصلة من هذا العمل في المشروع بشكل مستقل ولكن عندما أضع لهم جميعا معا وقوعه.

والإعداد لي بلدي UI في بلدي viewDidLoad، والإبقاء على أكثر من ذلك.

وبعد ذلك استخدام أحداث اللمس لاستدعاء أسلوب خارطتي تحديث:

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

وإعداد مثل هذا أنه سيتم تحميل الخريطة مع دائرة واحدة، ولكن إذا يتم تحديث الخريطة مرة أخرى أنه تعطل.

إذا أعلق خارج نشرة mapImage يعمل مرارا وتكرارا ولكن يؤدي إلى تسرب الذاكرة.

وطريقة addCircle أنا باستخدام:

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

وهي موضع تقدير أي فكرة / المشورة!

هل كانت مفيدة؟

المحلول

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

وهذا ليس جيدا. كنت فقدان الإشارة إلى محتويات mapImage عند إعادة تعيين على السطر الثاني. أسهل طريقة لإصلاح هذا إذا ربما لمجرد إضافة متغير إضافي، بحيث يمكنك تتبع كل من الصور.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top