2016-04-24 99 views
7

當您點擊圖像時,內置的Photo應用淡入/淡出navigationBar。這種方式照片應用程序允許看到它全屏。如何在iOS 9上淡入/淡出導航欄?

它是如何做到的(淡入淡出效果)?

據我所知navigationController?.navigationBar.alpha不再工作(所以你不能這樣動畫)。

+0

怎麼樣'UINavigationController的setNavigationBarHidden:動畫:'方法? – rmaddy

+0

順便說一句 - 我有一個應用程序,它可以動畫'navigationBar'的'alpha'屬性,它工作得很好。不知道爲什麼你說它不工作了。嘗試一下。 – rmaddy

+0

@rmaddy它顯示並隱藏導航欄。但是,它使用不同的動畫。它上下滑動(相對於淡入淡出) –

回答

5

分享我所有的發現。

提示模式坦率地說,我覺得一半生氣/像一個假,我只好打個好日子,執行現有的蘋果應用程序簡單的事情。

提示模式關閉

首先,這裏是一些背景。我正在使用navigationController提供的navigationBar(vs只是在你的視圖中手動放置的獨立酒吧)

我發現了幾種方法。我會提到他們都(即使我不得不使用他們沒有成功)

1)

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

@rmaddy提到這裏,它的作品爲他製作動畫的導航欄阿爾法的變化。不過,我相信他有一個獨立的酒吧(與由navigationController管理的酒吧)。

我使用工具Reveal來檢查UI層次結構並找到了一些東西。 - 有一個隱藏的導航條(並且navigationController?.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的#?取決於你的應用程序層次結構(vs你正在使用拆分視圖等)。我認爲你可以概括或者可能只是走整個層次結構來找到非隱藏的UINavigationBar來解決這個問題。
  • 我有一種感覺,蘋果可能在這個皺眉(您的應用不能被接受的AppStore)

4)製作的導航欄透明,並設置背景圖片是透明的,它改變alpha通道。

我無法找到我讀這個想法的地方。有幾個提到。

Apple example app它顯示瞭如何自定義NavigationBar,包括使其透明。

有趣的是,這個示例應用程序適用於我(導航欄是透明的)。但是,當我在我的應用程序中嘗試此代碼時,它不起作用(我仍然沒有弄清楚這是怎麼回事)。像往常一樣有一堆的變量(可能是一些在Info.plist中,他們也繼承NavigationController,也可能是視圖層次的東西)

5)添加獨立的導航欄

可以隱藏酒吧提供通過navigationController。把你自己添加到UIView,將它連接到@IBOutlet並在其上使用alpha動畫(最有可能這就是@rmaddy所指的)。

我檢查過,這是工作。

該方法用於this教程。

但是,它有一個缺點:

  • 我相信它不會處理好輪換,狀態欄高度的增加,而通話或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

相關問題