我有以下方法:
- (void)add:(id)sender {
MyAddViewController *controller = nil;
controller = [[MyAddViewController alloc] initWithAddType:1];
//controller.delegate = self;
// Do some animation. Slide it in from the right side of the screen.
CGPoint initialCenter = self.view.center;
controller.view.center =
CGPointMake(initialCenter.x + 320, initialCenter.y);
// Add the subview now with it's center + 320 off the screen.
[self.view addSubview:controller.view];
[UIView beginAnimations:@"animation" context:NULL];
[UIView setAnimationDuration:0.35];
[UIView setAnimationDelegate:self];
controller.view.center = CGPointMake(initialCenter.x, initialCenter.y);
//[UIView setAnimationDidStopSelector:@selector(aMethodToBeCalledAfterAnimationEnd:finished:context:)];
[UIView commitAnimations];
//[controller release];
}
您看到我的控制器版本是我的add方法中的最后一行。如果我取消注释该行,则动画完全消失,它只是将视图转储到没有动画的位置。
有没有更好的方法来执行发布而无需创建另一个通过 [UIView setAnimationDidStopSelect:@selector进行清理的方法(aMethodToBeCalledAfterAnmiationEnd ... ?
或者我可以执行 setAnimationDidStopSelector:@selector([controller release])之类的操作吗? :)
提前致谢!
答案 0 :(得分:1)
使用setAnimationDidStopSelector:
是解决动画完成后释放资源的一般问题的正确方法。
退后一步,重新考虑你在这里做的事情。你为什么要释放刚刚创建的控制器?如果您只是为了获取视图而创建控制器,那么这不是正确的方法。构建自己的工厂方法来创建视图,或使用NSBundle
中的方法从NIB加载视图。
答案 1 :(得分:0)
你可以这样做:
[UIView setAnimationDelegate: controller];
[UIView setAnimationDidStopSelector:@selector(release)];
答案 2 :(得分:0)
我看到你标记了这个iphone-sdk-4.0。您可以使用新的基于块的动画来执行此操作以及任何其他清理。有关详细信息,请参阅the documentation。