iPhone - viewDidLoad / viewDidAppear中的UIView动画问题

时间:2011-08-29 21:27:13

标签: iphone cocoa-touch animation uiview

我有一个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拥有的超级视图。

3 个答案:

答案 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]