簡體   English   中英

在兩個視圖控制器之間將手勢識別器實現為Segue

[英]Implementing Gesture Recognizer as Segue Between Two View Controllers

我正在構建一個名為“單張照片”的應用程序。 它是Apple的“學習編碼” iBook的一部分。 我已經構建了原始應用程序,但現在想在此基礎上進行擴展。

我在Main.storyboard中添加了第二個View Controller,以及一個UIImageView。 但是,我不確定如何將兩個View Controller連接在一起。 我知道我必須添加一個segue,但是我想使用滑動手勢(例如照片庫)。 建議我使用UIPanGestureRecognizer替代UISwipeGestureRecognizer。

我的困惑是我不確定如何實現UIGestureRecognizer。 我是否必須將其實現兩個View Controller之間的安全對象? 那是有道理的。

tl; dr: 如何將UIGestureRecognizer作為兩個View Controller之間的序列來實現?

編輯:當我進行一些更改時,我得到了屏幕截圖中看到的錯誤。 {1}: https//i.stack.imgur.com/JpViy.png {1}

我會為此使用滑動手勢; 對我來說,似乎最自然的一種可以通過觸摸更改視圖?

雖然我不十分了解Swift,但是這就是我要這樣做的方式。

  1. 使用Interface Builder將手勢識別器對象添加到視圖中。 您可以在要添加的對象(標簽,文本字段等)列表中找到它。

  2. 在您的ViewController.m中添加一個IBAction方法,並在您的.h中對其進行聲明,如下所示:

- (IBAction)handleSwipe:(UISwipeGestureRecognizer *)recognizer

  1. 將接口生成器中的手勢識別器作為“已發送動作”連接到IBAction

  2. 按住Control鍵並單擊第一個視圖控制器,然后將藍線拖動到第二個視圖,以創建新的Segue。 給此segue一個唯一的標識符並設置segue的樣式。

  3. 根據滑動方向在IBAction中處理手勢並從此處調用segue;

    [self performSegueWithIdentifer:@“ theSegue”發送者:self];

看看那能不能帶你到那里

可以使用UIPanGestureRecognizerUISwipeGestureRecognizer觸發視圖控制器之間的UISwipeGestureRecognizer ,但這絕不是自動的。

我建議使用UIPageViewController 這是一種父視圖控制器,它管理一組子視圖控制器,並允許您在它們之間進行分頁,例如相冊或iBooks

Xcode中內置了一個名為PhotoScroller的演示應用程序,它將為您提供想法。 在Xcode幫助系統中的PhotoScroller上搜索以找到它。 我記得它是用Objective-C編寫的,但它至少會讓您了解頁面視圖控制器的工作方式。

tl; dr:如何將UIGestureRecognizer作為兩個View Controller之間的序列來實現?

tl; dr:您將編寫一個交互式自定義視圖控制器過渡動畫

我認為這是一個很好的問題,如果分為兩個不同的部分,則可以得到最好的回答。

第一件事是了解如何使用UIGestureRecognizer,以便當用戶在某個視圖上輕擊,長按,旋轉,擠壓等時,您可以執行不同的操作。 然后,如果要使ViewController之間的過渡看起來與平常不同並為其添加酷效果,則需要了解有關UIViewControllerAnimatedTransitioning更多信息,這是一個很棒的教程: APPCODA的自定義View Controller過渡介紹和動畫。

  • 讓我們做一個例子,嘗試回答您的問題:

    1. 假設您有兩個ViewController,分別稱為MainVC和SecondaryVC,並且您想在用戶執行特定手勢后從一個過渡到另一個。 如前所述,您可以在它們之間創建序列並為其設置標識符(以便稍后可以在代碼中執行序列),方法是從情節提要中單擊序列並轉到Attributes Inspector。 對於此示例,讓我們將標識符設置為ToSecondaryVC ,並在用戶向視圖中的任意位置向右滑動時執行某些操作。

首先,您需要初始化UISwipeGesture對象,因此,通過將以下內容添加到MainVC類的ViewDidLoad()中來設置手勢識別器:

    let swipeGesture = UISwipeGestureRecognizer(target: self, action: #selector(MainVC.handleSwipeGesture(_:)))

    // Adding detection for a right swipe
    swipeGesture.direction = .Right
    view.addGestureRecognizer(swipeGesture)

此后,您要創建一個函數,在其中將執行swipeGesture之后的segue(或執行其他任何其他操作)。 像這樣

    func handleSwipeGesture(gesture: UISwipeGestureRecognizer) {
        performSegueWithIdentifier("ToSecondaryVC", sender: self)  
    }

我認為這樣做應該是為了了解如何使用UIGestureRecognizer ,並且您可以通過執行與本示例中非常相似的操作來處理其他受支持的手勢。 希望對您有所幫助! 祝你好運!

在情節提要中從初始視圖控制器到您的新控制器創建一個序列。 然后單擊它,並將標識符設置為某些內容。 將代碼的前三行放在初始控制器的viewDidLoad中,將“ MyVC”更改為控制器的類名。 然后放入方法並放入您創建的segue的名稱。

let gesture = UISwipeGestureRecognizer(target: self, action: #selector(MyVC.performChange))
gesture.direction = .right
self.view.addGestureRecognizer(gesture)

func performChange() {
    self.performSegue(withIdentifier: "MySegue", sender: nil)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM