2017-02-10 71 views
2

我想能夠在我的主視圖控制器上向下滑動並讓我的第二個視圖控制器從上面放下。我希望這種轉換是交互式的,因爲您可以在VC之間來回切換,而無需完成整個轉換(跟隨用戶的手指,如帶分頁的滾動視圖)。使用平移手勢識別器來關閉視圖控制器

這個效果可以在新的snapchat更新時在視圖控制器之間滑動時看到。當你第一次打開應用程序,你在相機屏幕上。如果您向任何方向(上,下,左或右)滑動,則相應的視圖進入並覆蓋相機屏幕。當你在視圖之間滑動時,它們基本上都覆蓋了主視圖(而不是像我在網上找到的許多使用scrollview來實現這種效果的教程那樣將它移動到一邊)。

本質上它看起來像一個垂直的頁面視圖控制器,但是當新的視圖控制器進入時,而不是將當前視圖控制器從屏幕上移開,新視圖將覆蓋當前視圖控制器,直到它完全位於視圖控制器之上。

從我的理解,平底手勢識別器可以做到這一點。 有誰知道我該如何去做這件事。我一直在尋找,似乎無法弄清楚。

回答

2

我希望能夠在我的主視圖控制器上向下滑動並讓我的第二個視圖控制器從上面放下。我希望這個過渡是互動的

好的,所以你正在描述一個自定義的交互式過渡動畫。你如何實現這一點的確切細節取決於你是否希望這是一個推送過渡或現在(模態)的過渡。我認爲這是一個演示(模態)的過渡。

因此,您將首先設置呈現的視圖控制器的transitioningDelegate。一切從那裏起飛。泛手勢識別器會調用present, 和過渡委託的委託方法將被調用:

  • animationController(forPresented:presenting:source:)
  • interactionControllerForPresentation(using:)

交互控制器,你從第二個方法返回負責響應通過更新動畫的「幀」(以及過渡協調器)來改變每個平移手勢的變化。

如果僅用於iOS 10,這很容易,因爲您可以使用UIViewPropertyAnimator。當手勢結束並且您決定完成或取消動畫時,它具有「快速」到動畫結束或開始的顯着能力。否則,您可能最好使用UIPercentDrivenInteractiveTransition對象來幫助您。

+0

這正是我所需要的,我明白這是如何工作的,但我無法弄清楚如何實現它。如果你不介意,你可以請稍微解釋一下。 – user6520705

+0

這是相當複雜的。現在大部分我已經說過基礎知識,你需要開始研究這個。如果你清楚這是一個呈現或推送的視圖控制器,它將會有所幫助。查找示例或教程也很有用。 – matt

+0

我沒有一個交互式呈現視圖控制器的例子,但我有一個用於不同類型的轉換,所以下載它並嘗試一下:https:// github。com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch06p296customAnimation2/ch19p620customAnimation1/AppDelegate.swift這是一個標籤欄控制器,您可以從側面拖動進入下一個視圖。該代碼顯示了手勢和動畫師之間的相互作用。 – matt