Исчезать в черном в контроллере uinavigation? - PullRequest
2 голосов
/ 04 июня 2010

Я хочу, чтобы весь экран (включая панель навигации) стал черным, когда пользователь нажимает кнопку на контроллере uinavigation, прежде чем показывать новый вид. (Я не хочу выдвигать этот новый взгляд, по разным причинам). Как бы я этого достиг?


EDIT

Благодаря Mac и Eiko я понял это. Вот код, который я использовал. Не уверен, что это оптимально, но это помогает.

// this is called from a programmatically constructed button. 
// change (void) to (IBAction) if linking from IB.

- (void)fadeAndShow:(id)sender
{
    // blackView is a @property which has been @synthesize-d
    // do I really need to alloc and init this?
    blackView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
    blackView.alpha = 0.0;
    [blackView setBackgroundColor:[UIColor blackColor]];
    [self.navigationController.navigationBar.superview addSubview:blackView];
    [UIView beginAnimations:@"fadeAway" context:NULL]; 
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDuration:0.75];
    [UIView setAnimationDidStopSelector:@selector(showNewScreen:finished:context:)];
    blackView.alpha = 1.0;
    [UIView commitAnimations];
}


-(void)showNewScreen:(NSString *)animationID finished:(BOOL)finished context:(void *)context
{
    // I guess you could fade in somewhere in the new view controller. 
    // don't know how to fade back in this view tho... viewDidAppear?
    NewViewController *controller = [[NewViewController alloc] initWithNibName:@"NewView" bundle:nil];
    [self.navigationController setNavigationBarHidden:YES];
    controller.hidesBottomBarWhenPushed = YES;
    [[self navigationController] pushViewController:controller animated:NO];
    [blackView removeFromSuperview];
    [controller release];
}

Ответы [ 2 ]

2 голосов
/ 04 июня 2010

С макушки головы (на самом деле я совсем не проверял следующее):

-(IBAction) buttonClicked:(id) sender  
{  
    [UIView beginAnimations:@"myAnimation" context:nil];  
    [UIView setAnimationDuration:ANIMATION_DURATION];

    blackView.alpha = 1.0;

    [UIView commitAnimations];
}
  1. Создайте UIView в суперпредставлении навигационной панели (который, как я предполагаю, имеет размер окна), такого же размера, что и окно.
  2. Установите для этого вида backgroundColor на [UIColor blackColor], а alpha на 0.0.
  3. В вашем обработчике кнопок сделайте что-то подобное (предположим, что ваш новый UIView равен blackView, а ANIMATION_DURATION - желаемое время анимации в секундах).
  4. Затем добавьте ваш новый вид сверху.

РЕДАКТИРОВАТЬ: слишком быстро для меня, Эйко! Кроме того, код вверху, поскольку упорядоченный список, кажется, искажает форматирование кода - извините, ответ выглядит немного странным.

2 голосов
/ 04 июня 2010

Вы можете добавить UIView черного цвета в размере экрана поверх текущего представления и анимировать его альфа от 0 до 1. Когда анимация будет завершена, добавьте ваш новый вид. Вы можете удалить черный затем. Анимируйте от 1 до 0 для обратного эффекта - переход от черного к содержанию).

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