[英]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,但是這就是我要這樣做的方式。
使用Interface Builder將手勢識別器對象添加到視圖中。 您可以在要添加的對象(標簽,文本字段等)列表中找到它。
在您的ViewController.m中添加一個IBAction方法,並在您的.h中對其進行聲明,如下所示:
- (IBAction)handleSwipe:(UISwipeGestureRecognizer *)recognizer
將接口生成器中的手勢識別器作為“已發送動作”連接到IBAction
按住Control鍵並單擊第一個視圖控制器,然后將藍線拖動到第二個視圖,以創建新的Segue。 給此segue一個唯一的標識符並設置segue的樣式。
根據滑動方向在IBAction中處理手勢並從此處調用segue;
[self performSegueWithIdentifer:@“ theSegue”發送者:self];
看看那能不能帶你到那里
可以使用UIPanGestureRecognizer
或UISwipeGestureRecognizer
觸發視圖控制器之間的UISwipeGestureRecognizer
,但這絕不是自動的。
我建議使用UIPageViewController
。 這是一種父視圖控制器,它管理一組子視圖控制器,並允許您在它們之間進行分頁,例如相冊或iBooks
。
Xcode中內置了一個名為PhotoScroller
的演示應用程序,它將為您提供想法。 在Xcode幫助系統中的PhotoScroller
上搜索以找到它。 我記得它是用Objective-C編寫的,但它至少會讓您了解頁面視圖控制器的工作方式。
tl; dr:如何將UIGestureRecognizer作為兩個View Controller之間的序列來實現?
tl; dr:您將編寫一個交互式自定義視圖控制器過渡動畫 。
我認為這是一個很好的問題,如果分為兩個不同的部分,則可以得到最好的回答。
第一件事是了解如何使用UIGestureRecognizer,以便當用戶在某個視圖上輕擊,長按,旋轉,擠壓等時,您可以執行不同的操作。 然后,如果要使ViewController之間的過渡看起來與平常不同並為其添加酷效果,則需要了解有關UIViewControllerAnimatedTransitioning
更多信息,這是一個很棒的教程: APPCODA的自定義View Controller過渡介紹和動畫。
讓我們做一個例子,嘗試回答您的問題:
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.