繁体   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