如何在swiftUI中添加拖动手势,以便更改视图?像Snapchat一样,向右滑动即可获取故事?

时间:2019-10-29 16:08:09

标签: swift swiftui xcode11

因此,在Snapchat上,您向左滑动即可进行聊天,向右滑动则可以进行故事/发现。如何在我的应用程序中实现呢? SwiftUI是否具有DragGesture()的此功能?还是只有UIKit才有这个,代码是什么?

2 个答案:

答案 0 :(得分:0)

在swiftUI中肯定有可能,但是我不太熟悉语言表达,因此我将回答UIKit,因为您暗示UIKit也对您来说是可以接受的答案。

从概念上讲,这是在UIKit中完成此操作的一种方法

将手势识别器添加到视图。您可以在此处查看操作方法:

How to programmatically send a pangesture in swift https://developer.apple.com/documentation/uikit/uiview/1622496-addgesturerecognizer

在视图的右侧或左侧添加第二个视图。 对第二个视图进行动画处理以根据触摸的移动和位置进行移动。

您还可以使用一个手势识别器来执行动画的自定义设置。通过向左和向右导航到不同的视图控制器的每个动画,对每个方向进行自定义设置。

https://www.appcoda.com/custom-segue-animations/

答案 1 :(得分:0)

Swift 中,您可以通过类似于以下代码的方式完成此任务:

  // First declare and initialize each swipe gesture you want to create.  I have added swipe left and right, to go back and forth between views.

   let rightSwipe : UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe(sender:)))
   rightSwipe.direction = .right

   let leftSwipe : UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe(sender:)))
   leftSwipe.direction = .left

接下来,您要在函数中处理每次滑动。

@objc func handleSwipe(sender: UISwipeGestureRecognizer) {

     if sender.direction == .right { // user swiped right
          // push view controller (push new view on the navigation stack)
          self.navigationController?.pushViewController(viewController(), animated: true)

     } else { // user swiped left
          // pop view controller (go back one view on the navigation stack)
          self.navigationController?.popViewController(animated: true)

     }
}