2014-10-28 2 views
1

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

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

Копаясь, я нашел, что приложение HotelTonight удалось реализовать это. См. Запись их пользовательского интерфейса. Я сделал: https://www.youtube.com/watch?v=qvynwhCj5oM&list=UUKnxsyMsRRRJs_Yw9GZVOFw

Есть ли у кого-нибудь предложения по правильному пути реализации этого?

+1

ваше видео скрыто. –

+0

Извинения, iMovie установить его как скрытый. Теперь это исправлено. – dusker

ответ

0

Возможно, лучше подкласс UIViewController иметь определенную настройку для своего стиля фона и навигации. Например, в методе viewDidLoad вашего подкласса UIViewController установите его фон на определенное изображение. Вы также можете использовать это, чтобы создать свою навигационную панель (определенные цвета для barButtonItems и т. Д.). Затем каждый новый контроллер просмотра, который вы создаете, является подклассом вашего скин-контроллера.

Если ваш фон является изображением, вы по-прежнему будете получать необычные эффекты анимации, когда новый контроллер представления будет скользить в верхней части старого; фон также будет скользить. В зависимости от того, каким образом вы хотите сделать свою анимацию перехода, вы можете делать все, чтобы играть с представлениями во время перехода. UIPresentationController может представить некоторые решения для создания более настраиваемого анимированного перехода.

Редактировать: Чтобы подражать приложению «Отель сейчас», я сделал UINavigationController с изображением в качестве фона и контроллерами сверху с ясным фоном. При нажатии, я анимацию альфа первого контроллера до 0 в то время как segue происходит. По возвращению, я установил альфа обратно к 1.

-(void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    self.view.alpha = 1; 
} 

-(void)didClickButton:(id)sender { 
    [UIView animateWithDuration:.25 animations:^{ 
     self.view.alpha = 0; 
    }]; 

    // the transition itself is a push segue defined in the storyboard 
} 

Я считаю, что фон отеля приложение хорошо работает с этим методом, так как это очень темно. Не уверен, что это будет очень эффективно для более ярких приложений или приложений с большим количеством контента в контролируемом контроллере.

+0

То, что вы описали, не достигнет того, о чем я говорил. Смотрите видео. Мне нужно иметь один статический фон для всех контроллеров представления в стеке. – dusker

+0

после щелчка назад и вперед куча раз в моем отеле теперь приложение, я вижу две вещи: 1) Я думаю, что содержание первого контроллера постепенно исчезает и возвращается очень быстро. 2) Я на самом деле вижу тень первого экрана ненадолго, когда второй проходит. Поэтому я считаю, что они угасают содержимое первого экрана, а второй экран переходит в стек. Я смог воспроизвести это, сделав анимированный альфа-эффект на контроллере, который подталкивал новый контроллер. – mitrenegade

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