Хотя на представление изображения все еще ссылается представление, к которому вы добавили его, вы не имеют на него никаких ссылок. После того, как вы позвоните [imgView release]
перед блоком анимации, вы потеряете все ссылки на изображение. Практическое правило заключается в том, что для каждого alloc
, copy
и retain
требуется соответствие release
или autorelease
. Хотя overlayView
внутренне сохраняет ссылку на представление, вы retain
не указали его нигде, поэтому, как только вы его отпустите, оно исчезнет.
Я предлагаю вместо этого автоматически выпустить UIImageView. (Или вы можете поместить release
в обработчик завершения.)
Пример кода:
UIImageView *imgView = [[[UIImageView alloc] initWithImage:img] autorelease];
int offX = imgView.frame.size.width / 6;
int offY = (imgView.frame.size.height - 44) / 6;
imgView.frame = CGRectMake(offX, offY, imgView.frame.size.width - offX * 2,
(imgView.frame.size.height - 44) - offY * 2);
[overlayView addSubview:imgView];
[UIView animateWithDuration:1.0 animations:^{
[imgView setCenter:CGPointMake(TRASH_X, TRASH_Y)];
[imgView setTransform:CGAffineTransformMakeScale(0.1, 0.1)];
[imgView setAlpha:0.5];
} completion:^(BOOL finished) {
[imgView removeFromSuperview];
}];
EDIT:
Вы можете попробовать изменить [imageView removeFromSuperview];
на:
if(imageView){
[imageView removeFromSuperview];
}