iPhone - проблема анимации UIView в viewDidLoad / viewDidAppear - PullRequest
3 голосов
/ 30 августа 2011

У меня есть 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
}

Но при загрузке анимация не видна ... Iтакже пробовал с viewWillAppear без изменений.

он вызывается вне MenuViewController с:

- (IBAction) showMenu
{
    MenuViewController* menuController = [[MenuViewController alloc] initWithNibName:@"Menu" bundle:nil];];
    [self.view addSubview:menuController.view];
//    [menuController release];   for try
}

В чем проблема?

PS: что я хочу сделать, это когдапредставление отображается, некоторая часть этого представления (menuView) перемещается.Это представление (частично прозрачное) предназначено для охвата суперпредставления, принадлежащего другому ViewController.

Ответы [ 3 ]

3 голосов
/ 30 августа 2011

Вы вызываете метод 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 голосов
/ 30 августа 2011

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

<code>[super viewDidAppear:animated]
0 голосов
/ 30 августа 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...