我已经尝试了几天来解决这个问题,但我觉得我已经错了,或者只是错过了一些非常简单的东西。
我有一个单独的视图,它采用滑动手势,在滑动时,它将尝试从nib文件创建子视图。我能够加载子视图并删除子视图,但是在某处需要分配视图或删除它。
在当前视图.m文件中,我正在合成我的第二个视图,在第一个视图的.h文件中,我还有一个: @class settingsviewcontroller
settingsviewcontroller * settingsview
然后 @property nonatomic retain for settingsview
在下面的代码中,我正在分配子视图。它在没有[settingsview发布的情况下工作[但是我得到了一个糟糕的内存错误。
在代码的第二部分中,它是一个来自settingsviewcontroller的函数,用于删除视图。它需要用户执行操作并在屏幕外设置动画,并尝试将其删除,或者至少我认为它也会尝试。
- (IBAction)swiping:(id)sender {
//SettingsViewController *SettingsView = [[SettingsViewController alloc] init];
settingsView = [[SettingsViewController alloc] init];
CATransition *animation = [CATransition animation];
[animation setDuration:0.5f];
[animation setType:kCATransitionPush];
[animation setSubtype:kCATransitionFromTop];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[self.view addSubview:[settingsView view]];
[[self.view layer] addAnimation:animation forKey:@"SwitchToView1"];
[settingsView release];
}
- (IBAction)rollOut:(id)sender {
UIView *currentView = self.view;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDidStopSelector:@selector(removeFromSuperview)];
//[UIView setAnimationDidStopSelector:@selector(release)];
[UIView setAnimationDuration:0.5f];
currentView.transform = CGAffineTransformMakeTranslation(currentView.frame.origin.x, 480);
[UIView commitAnimations];
}
请给我一些方向,如果你指的是我正确的方向,我可以理解怎么做。
答案 0 :(得分:4)
[self.view addSubview:[settingsView view]];
此代码不会保留您的settingsView,而是“settingsview的视图”,因此如果您调用[settingsView release]; settingsView已经发布,如果您在某处调用settingsView,则会出现内存错误。
这个“@property nonatomic retain for settingsview”,所以你可以替换[settingsView release]; by self.settingsView = nil;