如何使用 panGesture 从 firstViewController 的顶部移动 secondViewController?

Posted

技术标签:

【中文标题】如何使用 panGesture 从 firstViewController 的顶部移动 secondViewController?【英文标题】:how to move the secondViewController from the top of the firstViewController using panGesture? 【发布时间】:2018-09-03 17:18:36 【问题描述】:

我正在尝试使用 panGesture 将 secondViewController 移出 firstViewController 的顶部,但我遇到了问题...

当我开始移动 secondViewController 时,控制器后面会出现黑屏,而不是 firstViewController(正如我所料),我不知道如何解决这个问题......

这是说明我的问题的代码...

这里是第一个VC..

import UIKit

class mainController: UIViewController 

    let tapGestureRecognizer = UITapGestureRecognizer()
    let secondVC = SecondViewController()

    override func viewDidLoad() 
        super.viewDidLoad()

        tapGestureRecognizer.addTarget(self, action: #selector(goToSecondVC))

        view.backgroundColor = UIColor.red
        view.addGestureRecognizer(tapGestureRecognizer)
    

    @objc func goToSecondVC()
        present(secondVC, animated: true, completion: nil)
            

这里还有 secondVC..

import UIKit

class SecondViewController: UIViewController 

    let panGesture = UIPanGestureRecognizer()

    override func viewDidLoad() 
        super.viewDidLoad()
        view.backgroundColor = UIColor.green

        panGesture.addTarget(self, action: #selector(moveView))

        view.addGestureRecognizer(panGesture)
    

    @objc func moveView(pan: UIPanGestureRecognizer)
        let translation = pan.translation(in: view)

        if pan.state == .began
            print("began")

         else if pan.state == .changed 

            view.frame.origin.x += translation.x

            pan.setTranslation(CGPoint.zero, in: view)
         else if pan.state == .ended

            print("ended")                
        
    

为什么在第二个视图控制器后第二个视图控制器后面会出现黑屏?

【问题讨论】:

【参考方案1】:

您只需要正确设置您的SecondViewControllermodalPresentationStyle...

@objc func goToSecondVC()
    secondVC.modalPresentationStyle = .overCurrentContext
    present(secondVC, animated: true, completion: nil)

【讨论】:

以上是关于如何使用 panGesture 从 firstViewController 的顶部移动 secondViewController?的主要内容,如果未能解决你的问题,请参考以下文章

如何允许在某个区域拖动 UIView (PanGesture ..)

将图像从 UIScrollView 移动到 UIView - Swift 4 PanGesture

如何取消 LongPressGesture 以便 PanGesture 可以识别

如何实现多个 PanGestures(可拖动视图)?

如何将按钮中的 panGesture 传递给 tableView? (斯威夫特 4)

当用户的手指不再位于启动 panGesture 的视图中时,如何结束 UIPanGesture?