【问题标题】:UISwipeGestureRecognizer implementation with Swift使用 Swift 实现 UISwipeGestureRecognizer
【发布时间】:2015-06-29 22:29:25
【问题描述】:

我有一个带有三个选项卡的选项卡式应用程序,我想使用滑动手势识别器在它们之间进行转换。

  1. 我将一个滑动手势识别器从对象库拖放到第一个视图和一个到第三个视图。我在第二个视图上添加了两个,因此我可以左右滑动。
  2. 我将 Swipe 更改为 Attribute Inspector,以便它可以根据需要向右或向左滑动
  3. 使用 Assistant 编辑器,我使用 Control+Drag 为正确的 ViewController.swift 文件创建操作。

我还应该怎么做才能使刷卡起作用? 我在网上找到的所有指南都在 Objective-C 中。有谁知道如何在 Swift 中完成这些事件?

【问题讨论】:

  • 您应该查看自定义视图控制器转换。它们已在 iOS8 中引入,它们可以制作动画。你应该学习阅读Objective-C。这种语言不会很快消失,很多很好的例子都是用 Objective-C 编写的。
  • 这篇文章怎么样? ioscreator.com/tutorials/…

标签: swift events uiswipegesturerecognizer xcode6.3 ios8.3


【解决方案1】:

您必须应用自定义视图控制器转换。否则,您的选项卡转换既不是动画(默认情况下选项卡切换没有动画)也不是交互式的(您无法通过手势控制速度)。

Colin Eberhardt 的VC Transitions Library 是一个很好的起点。它在 Objective-C 中,但你可以在 Swift 中使用它。

只是一个警告:自定义视图控制器转换是 iOS 7 或 8 的不成熟部分。如果在自定义视图仍在运行时启动另一个视图转换,UI 或多或少会锁定。它很容易发生:用户在转换结束之前按下另一个选项卡,您的代码切换选项卡并同时按下视图控制器,用户在转换期间设法按下一个按钮以打开另一个视图控制器等。

【讨论】:

    【解决方案2】:


    编辑:我已经向 github 添加了一个示例项目,它完全可以工作。随意复制它或炒它。



    您无需将它们添加到故事板中。首先将此代码添加到您的初始化程序(大多数情况下为 viewDidLoad):

        var swipeGesture = UISwipeGestureRecognizer(target: self, action: "SwipeToNextViewController:")
        swipeGesture.direction = UISwipeGestureRecognizerDirection.Left
        view.addGestureRecognizer(swipeGesture) 
    
        var swipeGestureReverse = UISwipeGestureRecognizer(target: self, action: "SwipeToPreviousViewController:")
        swipeGestureReverse.direction = UISwipeGestureRecognizerDirection.Right
        view.addGestureRecognizer(swipeGestureReverse)
    

    现在您的 viewController 有了手势,如果您向左滑动,SwipeToNextViewController() 将被调用,而向右滑动时将调用 SwipeToPreviousViewController()。 为与手势相关的两个函数编写代码:

    func SwipeToNextViewController(gestureRecognizer:UISwipeGestureRecognizer)
    {
        performSegueWithIdentifier("next", sender: self)
    }
    
    func SwipeToPreviousViewController(gestureRecognizer:UISwipeGestureRecognizer)
    {
        performSegueWithIdentifier("previous", sender: self)
    }
    

    当视图向左或向右滑动时将调用这两个函数。在其中添加您的代码(在本例中为 performSegue),您可以转到另一个 viewController。

    希望对你有帮助:)

    【讨论】:

    • 我创建了一个空应用程序,只需复制并粘贴您在此处的代码。它根本不起作用。每次向左或向右滑动时,我都会在输出面板中收到以下消息:libc++abi.dylib: terminating with uncaught exception of type NSException
    • 您是否在空应用程序中添加了另外两个视图控制器并根据您的 performeguewithidentifier 更改它们的 segue 标识符?
    • 我上传了两张图片。我认为这样会更有帮助。
    • @Fotis 我在 github 上添加了一个可以工作的示例项目。去看看吧。喜欢就复制它的代码
    • 这会在我滑动时删除标签栏?
    猜你喜欢
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多