2012-02-20 2 views
0

Так что я хотел бы получить всплеск на весь экран (320x480 - без состояния панели и то же изображение, что и Default.png), анимированный с экрана влево после короткой задержки. Я могу создать всплеск и анимацию в порядке, единственная проблема заключается в том, что панель состояния из основного контроллера представлений отображается поверх всплывающего экрана. Как я могу оживить всплеск во весь экран, так что основной контроллер корневого представления (который имеет область состояния) обнаруживается по мере продвижения анимации, если на панели заставки не появляется панель состояния.iPhone анимированный заставку, скрывающийся за статусной панелью

Я использую флаг info.plist, чтобы сначала скрыть область состояния, но я хочу, чтобы панель состояния была видна только в основном представлении, так как всплеск перемещается за пределы экрана, но не отображается поверх самого всплеска.

Я не хочу скрывать базовую панель состояния и показывать ее еще раз в конце анимации, я бы просто хотел, чтобы она была раскрыта постепенно с остальной частью основного вида.

Я надеюсь, что все это имеет смысл.

Благодаря 2J

ответ

0

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

UIWindow *statusWindow = [[UIWindow alloc]initWithFrame:CGRectMake(0, 0, 320, 480)]; 

    statusWindow.hidden = NO; 
    statusWindow.windowLevel = UIWindowLevelStatusBar+1; 
    UIView *mask = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 480)]; 
    mask.backgroundColor = [UIColor redColor]; 
    [statusWindow addSubview:mask]; 

    [statusWindow makeKeyAndVisible]; 
    [UIView animateWithDuration:1 delay:5 options:nil animations:^{ 
     statusWindow.alpha = 0; 
    } completion:^(BOOL finished) { 
     [self.window makeKeyAndVisible]; 
     [statusWindow removeFromSuperview]; 
    }]; 

Таким образом, строка состояния будет скрыта. Единственная проблема заключается в том, что вам нужно будет отслеживать изменения ориентации и вручную настраивать маску, поскольку это UIWindow, находящееся выше окна строки состояния.

+0

Привет, спасибо за ответ. Хотя я думал, что, возможно, второе UIWindow было возможным решением здесь, я нашел следующее в руководстве по программированию iOS Apple ... Объект UIWindow Объект UIWindow координирует представление одного или нескольких видов на экране. В большинстве приложений есть только одно окно, которое представляет контент на главном экране, но приложения могут иметь дополнительное окно для контента, отображаемого на внешнем дисплее. Чтобы изменить содержимое вашего приложения, вы используете контроллер вида для изменения представлений, отображаемых в соответствующем окне. Вы никогда не заменяете само окно. – 2Jam

+0

Это не говорит, что вы не можете. Просто предлагает не делать этого. – MobileOverlord

+0

В последнем руководстве по программированию указано: «Вы никогда не заменяете само окно». Это, вероятно, сильнее, чем «предположить», что вы этого не делаете. Приложение предназначено для важного клиента, поэтому не может принимать никаких рисков в отношении отказа. Я отметил ответ как работающий, но действительно хотел бы найти решение, которое никак не сгибает правила утверждения. - Спасибо :) – 2Jam

0

Вот пример, используя очень основной экран заставки. Следующий код должен быть добавлен в конце application:didFinishLaunchingWithOptions: в делегат приложения.

// create splash screen 
splashView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
splashView.backgroundColor = [UIColor lightGrayColor]; 

// adding views to window 
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 
[self.window addSubview:rootController.view]; 
[self.window addSubview:splashView]; 
[self.window makeKeyAndVisible]; 

// animate splash screen 
[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:2]; 
[UIView setAnimationDelegate:self]; 
[UIView setAnimationDidStopSelector:@selector(removeSplashView:)]; 
[splashView setAlpha:0.0]; 
[UIView commitAnimations]; 
+0

@ David. Благодарим за предоставленное предложение, но на самом деле оно не скрывает область состояния представления rootController. Как только появится экран заставки, панель состояния появится поверх нее, прежде чем анимация начнется. – 2Jam

Смежные вопросы