我有一个UIView,其中包含一个名为menuView的子视图,由MenuViewController管理。
我写了那段代码:
- (void) viewDidLoad
{
[self.menuView setFrame:CGRectOffset(self.menuView.frame, 0.0, self.menuView.frame.size.height)];
[super viewDidLoad];
}
- (void) viewDidAppear:(BOOL)animated
{
[UIView beginAnimations:@"SomeAnimation" context:nil];
[UIView setAnimationDuration:2.0];
[UIView setAnimationDelegate:self];
[UIView setAnimationTransition:UIViewAnimationTransitionNone forView:self.menuView cache:YES];
[self.menuView setFrame:CGRectOffset(self.menuView.frame, 0.0, -self.menuView.frame.size.height)];
[UIView commitAnimations];
[super viewDidAppear:animated]; // tried at begining too
}
但加载后,没有动画可见......我也尝试过使用viewWillAppear而没有任何变化。
在MenuViewController外部调用它:
- (IBAction) showMenu
{
MenuViewController* menuController = [[MenuViewController alloc] initWithNibName:@"Menu" bundle:nil];];
[self.view addSubview:menuController.view];
// [menuController release]; for try
}
有什么问题?
P.S。 :我想要做的是当显示视图时,该视图的某些部分(menuView)移动。该视图(部分透明)旨在涵盖另一个ViewController拥有的超级视图。
答案 0 :(得分:3)
您是否从视图控制器调用viewDidAppear方法?某些控制器(如UINavigationController)会处理这个问题,但如果您使用的是自定义控制器,则需要调用它。通常,您将调用viewWillAppear,然后添加视图,调用viewDidAppear。
所以你的代码块将是:
- (IBAction) showMenu
{
MenuViewController* menuController = [[MenuViewController alloc] initWithNibName:@"Menu" bundle:nil];];
[menuController viewWillAppear:YES];
[self.view addSubview:menuController.view];
[menuController viewDidlAppear:YES];
[menuController release];
}
答案 1 :(得分:0)
你能否确认self.menuView实际上已正确初始化并且不是nil?
答案 2 :(得分:0)
也许您应该首先调用方法的超级初始化?
[super viewDidAppear:animated]