У меня есть рекурсивная функция, которая непрерывно воспроизводит анимацию UIView (если есть лучший способ сделать это, пожалуйста, дайте мне знать):
-(void)playAnimationRecursive
{
[appDelegate commenceFishAnimation];
[animationView addSubview:appDelegate.fishAnimationImageView];
animationView.alpha=0.5;
[NSTimer scheduledTimerWithTimeInterval:14.0 target:self selector:@selector(playAnimationRecursive) userInfo:nil repeats:NO];
}
и не уверен, что это необходимо, но вотappDelegate commenceFishAnimationMethod:
upperFish=[[UIImageView alloc] initWithImage:upperFishImage];
bigFish=[[UIImageView alloc] initWithImage:bigFishImage];
shark=[[UIImageView alloc] initWithImage:sharkImage];
groupFish=[[UIImageView alloc] initWithImage:groupFishImage];
fish1=[[UIImageView alloc] initWithImage:fish1Image];
fishAnimationImageView=[[[UIImageView alloc] init] retain];
//set the initial position of each fish to be out of frame
upperFish.frame=CGRectMake(-50, 150, 119/2, 93/2); //moves east
bigFish.frame=CGRectMake(-280, 340, 251/2, 137/2); //moves east
shark.frame=CGRectMake(-100, 390, 164/2, 52/2); //moves east
groupFish.frame=CGRectMake(500, 320, 155/2, 89/2); //moves west
fish1.frame=CGRectMake(370, 280, 155/2, 89/2); //moves west
//add fishes to current view
[fishAnimationImageView addSubview:upperFish];
[fishAnimationImageView addSubview:bigFish];
[fishAnimationImageView addSubview:shark];
[fishAnimationImageView addSubview:groupFish];
[fishAnimationImageView addSubview:fish1];
//animate the position of each fish view
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:10.0];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
upperFish.transform=CGAffineTransformMakeTranslation(150, -200);
bigFish.transform=CGAffineTransformMakeTranslation(600, 0);
shark.transform=CGAffineTransformMakeTranslation(550, 0);
groupFish.transform=CGAffineTransformMakeTranslation(-600, 0);
fish1.transform=CGAffineTransformMakeTranslation(-550, 0);
[UIView commitAnimations];
[fishAnimationImageView release];
[upperFish release];
[bigFish release];
[shark release];
[groupFish release];
[fish1 release];
}
Итак, что происходит, так это то, что каждое мое представление воспроизводит эту анимацию в BG, поэтому, если я нахожусь на представлении A, тогда она вызывает рекурсивную функцию и воспроизводит анимацию непрерывно.Если я перехожу к представлению B, то он также вызывает рекурсивную функцию и непрерывно воспроизводит анимацию.Тем не менее, я получаю предупреждение памяти уровня 2, и я думаю, возможно, это потому, что представление A все еще вызывает рекурсивный метод?Если это причина, то как бы я остановил рекурсивный метод при выгрузке?Или это не моя проблема?
РЕДАКТИРОВАТЬ:
Вот мой код сейчас (анимация не зацикливается)
-(void)commenceFishAnimation
{
UIImageView *newImageView=[[UIImageView alloc] init];
self.fishAnimationImageView=newImageView;
upperFish=[[UIImageView alloc] initWithImage:upperFishImage];
bigFish=[[UIImageView alloc] initWithImage:bigFishImage];
shark=[[UIImageView alloc] initWithImage:sharkImage];
groupFish=[[UIImageView alloc] initWithImage:groupFishImage];
fish1=[[UIImageView alloc] initWithImage:fish1Image];
//set the initial position of each fish to be out of frame
upperFish.frame=CGRectMake(-50, 150, 119/2, 93/2); //moves east
bigFish.frame=CGRectMake(-280, 340, 251/2, 137/2); //moves east
shark.frame=CGRectMake(-100, 390, 164/2, 52/2); //moves east
groupFish.frame=CGRectMake(500, 320, 155/2, 89/2); //moves west
fish1.frame=CGRectMake(370, 280, 155/2, 89/2); //moves west
//add fishes to current view
[fishAnimationImageView addSubview:upperFish];
[fishAnimationImageView addSubview:bigFish];
[fishAnimationImageView addSubview:shark];
[fishAnimationImageView addSubview:groupFish];
[fishAnimationImageView addSubview:fish1];
//animate the position of each fish view
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:10.0];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
upperFish.transform=CGAffineTransformMakeTranslation(150, -200);
bigFish.transform=CGAffineTransformMakeTranslation(600, 0);
shark.transform=CGAffineTransformMakeTranslation(550, 0);
groupFish.transform=CGAffineTransformMakeTranslation(-600, 0);
fish1.transform=CGAffineTransformMakeTranslation(-550, 0);
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(commenceFishAnimation)];
[UIView commitAnimations];
[fishAnimationImageView release];
[upperFish release];
[bigFish release];
[shark release];
[groupFish release];
[fish1 release];
//[newImageView release]; //if I release it, then my animation doesn't play for some reason
}
Затем в каком-то другом классе в методе viewDidLoadЯ делаю это:
[appDelegate commenceFishAnimation];
[animationView addSubview:appDelegate.fishAnimationImageView];
Но анимация воспроизводится только один раз.