2016-04-24 1 views
7

Встроенное приложение для фотографий затухает в/из навигации навигации при нажатии на изображение. Таким образом, приложение «Фото» позволяет увидеть его в полноэкранном режиме.Как затухать в/из navigationBar на iOS 9?

Как это сделать (fade efect)?

Как я понимаю navigationController?.navigationBar.alpha больше не работает (так что вы не можете анимировать его таким образом).

+0

Что можно сказать о 'UINavigationController setNavigationBarHidden: анимированные:' метод ? – rmaddy

+0

BTW - У меня есть приложение, которое анимирует свойство 'alpha'' navigationBar', и оно отлично работает. Не уверен, почему вы говорите, что он больше не работает. Попробуй. – rmaddy

+0

@rmaddy Это показывает и скрывает панель навигации. Однако он использует различную анимацию. Он скользит по нему вверх и вниз (и исчезает) –

ответ

5

Обмен всеми моими находками.

режим Пожаловаться на

Честно говоря, я чувствую себя наполовину обозленный/как манекен, который я должен был бороться хороший день, чтобы реализовать простую вещь, существующую в Apple App.

режим Пожаловаться выключен

Прежде всего здесь некоторый контекст. Я работаю с navigationBar, которые предоставляются navigationController (только с отдельными барами, которые вручную сброшены на ваш взгляд)

Существует несколько подходов, которые я нашел. Я упоминаю все из них (даже если бы я не имел успеха, используя их)

1) анимировать изменение альфа Панель навигации

UIView.animateWithDuration(0.1, animations: { 
    navigationController?.navigationBar.alpha = 0 
}, completion: nil) 

@rmaddy упоминается здесь, что он работает для него. Тем не менее, я считаю, что у него есть отдельный бар (против бара, управляемого навигационным контроллером).

Я использовал инструмент Reveal, чтобы проверить иерархию пользовательского интерфейса и найти пару вещей. - Существует скрытая навигационная панель (и navigationController?.navigationBar ссылается на нее). Таким образом, вы можете изменить альфу в ваших сердцах, но эти изменения не будут видны.

Существует, однако, другой navigationBar. Я предполагаю, что на него ссылаются некоторые частные члены navigationController (назовем его private navigationBar). Это видно, и это то, что отображается в верхней части вашего представления.

2) Использование setNavigationBarHidden: анимированные:

Это стандартный способ, чтобы скрыть/показать панель навигации. Он анимирован по-другому (он скользит/вверх и вниз). Однако, если это нормально для вас, просто пойдите с этим, потому что это просто и чисто.

navigationController?.setNavigationBarHidden(true, animated: true) 

Кроме того, вы можете обернуть его в UIView.beginAnimations, UIView.commitAnimations оживить его вместе с некоторыми другими вещами (чтобы сделать ее более гладкой)

3) анимировать изменение альфа частной навигационной панели.

Это работает для меня:

let privateNavigationBar = self.superview?.superview?.superview?.superview?.superview?.superview?.subviews[1] 
UIView.animateWithDuration(0.1, animations: { 
     privateNavigationBar.alpha = 0 
    }, completion: nil) 

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

Однако этот подход имеет несколько недостатков:

  • Я считаю, # из superviews? зависит от вашей иерархии приложений (кроме того, вы используете разделенное представление и т. д.). Я думаю, вы можете обобщить или, может быть, просто пройти всю иерархию, чтобы найти не скрытый UINavigationBar, чтобы решить эту проблему.
  • У меня есть ощущение, что компания Apple может нахмуриться на этом (приложение не принимаются в AppStore)

4) Сделать прозрачным и Панель навигации установить фоновое изображение быть прозрачным и изменить альфа-канал на нем.

Я не могу найти, где я читал об этой идее. Было несколько упоминаний.

Apple example app, который показывает, как настроить NavigationBar, в том числе сделать его прозрачным.

Интересно, что это приложение работает для меня (панель навигации прозрачна в нем). Однако, когда я пробовал этот код в своем приложении, он не работал (я до сих пор не понял, что происходит с этим). Как обычно есть куча переменных (может быть что-то в Info.plist, они также подкласс NavigationController, также может быть что-то в иерархии видов)

5) Добавление автономного Панель навигации

Вы можете скрыть бар при условии by navigationController. Добавьте свой собственный в UIView, подключите его к @IBOutlet и используйте альфа-анимацию на нем (скорее всего, это тоже относится к @rmaddy).

Я проверил и это работа.

Этот подход используется в учебнике this.

Тем не менее, есть и обратная сторона:

  • Я считаю, что не будет обрабатывать также вращение, увеличение высоты STATUSBAR во время разговора или GPS

Каждый раз, когда я вижу код, как это (написано в статье) Я знаю, что будут проблемы с изменением размера: CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), 64.0)

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

6) Другие методы

я видел еще два метода. Я не знаю, будут ли они работать или что будет недостатки:

Один из них в этом вопросе: How to hide/show status bar and navigation bar by fading in/out at the same time like the Photos app in iOS 7?

И этот ответ: https://stackoverflow.com/a/18063898/422080

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