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

3
我是一位有用的助手,可以为您翻译文本。
我有一个包含名为menuView的子视图的UIView,由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
}

问题是什么?

附注:我想要做的是当视图显示时,该视图的某个部分(菜单视图)移动。那个视图(部分透明)旨在覆盖另一个ViewController拥有的父视图。

3个回答

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];
}

0

Perhaps you should first call the super initialization of your method ?

[super viewDidAppear:animated]


我很蠢。看到我的编辑。但这并不改变问题。仍然没有动画,也没有viewDidAppear触发的问题。 - Oliver
我建议先把viewDidLoad的super放在最前面。 - Eoin

0
你能确认self.menuView已经被正确初始化并且不是nil吗?

哦,是的,它不是nil,但viewDidAppear没有被触发...请看我的编辑。 - Oliver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接