У меня есть 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
Oliver 30 Авг 2011 в 01:27

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];
}
3
picciano 29 Авг 2011 в 22:03

Можете ли вы подтвердить, что self.menuView действительно правильно инициализирован и не равен нулю?

0
Stefan Arentz 29 Авг 2011 в 21:29

Может быть, вам сначала следует вызвать суперинициализацию вашего метода?

[super viewDidAppear:animated]
0
Pierre 29 Авг 2011 в 21:52