【问题标题】:UIPanGestureRecognizer in Playgrounds游乐场中的 UIPanGestureRecognizer
【发布时间】:2020-05-18 11:17:08
【问题描述】:

我在玩游乐场(棒极了,对吧?)

如果我想使用模拟器进行捏合手势,我可以使用选项并移动鼠标来执行捏合手势。

相同的组合在 Playgrounds 中没有任何作用。

对于一些示例代码,您可以复制粘贴以下内容:

import UIKit
import PlaygroundSupport

class MyViewController: UIViewController {

    let clickableView = UIView()

    override func loadView() {
        let view = UIView()
        view.backgroundColor = .lightGray

        clickableView.backgroundColor = .blue

        view.addSubview(clickableView)

        clickableView.translatesAutoresizingMaskIntoConstraints = false
        clickableView.widthAnchor.constraint(equalToConstant: 200).isActive = true
        clickableView.heightAnchor.constraint(equalToConstant: 200).isActive = true
        clickableView.centerYAnchor.constraint(equalTo:view.centerYAnchor).isActive = true
        clickableView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        self.view = view
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        let pan = UIPanGestureRecognizer(target: self, action: #selector(handlePan(_:)))
        clickableView.addGestureRecognizer(pan)

        let pinch = UIPinchGestureRecognizer(target: self, action: #selector(handlePinch(_:)))
        clickableView.addGestureRecognizer(pinch)
    }

    @objc func handlePinch(_ sender: UIPinchGestureRecognizer) {        
        guard let gestureView = sender.view else {
          return
        }

        gestureView.transform = gestureView.transform.scaledBy(
          x: sender.scale,
          y: sender.scale
        )
        sender.scale = 1
    }

    @objc func handlePan(_ sender: UIPanGestureRecognizer) {
        guard let targetView = sender.view else {return}
        let translation = sender.translation(in: view)
        targetView.center = CGPoint(x: targetView.center.x + translation.x
            ,y: targetView.center.y + translation.y)
        sender.setTranslation(CGPoint.zero, in: view)
    }
}

PlaygroundPage.current.liveView = MyViewController()

有没有办法在 Playgrounds 中测试捏合手势?

【问题讨论】:

    标签: swift xcode swift-playground


    【解决方案1】:

    您实际上可以在游乐场中使用选项键来做两指手势,但这有点挑剔。

    1. 您需要确保先单击实时视图。有时这不起作用 - 如果没有,请继续重新运行您的 Playground,直到您将鼠标悬停在实时视图上时光标变成一个小手。然后单击查看并保留选项。您应该会在鼠标指针周围看到至少一个灰色圆圈。
    2. 代表你两根手指的两个灰色圆圈的起始中心点实际上有点奇怪。在我的实验中,它总是在CGPoint(x: 384, y: <half of your live view's height>),可能是因为游乐场使用的设备是 iPad Pro(9.7 英寸),它的屏幕尺寸为 768x1024(和 384 = 768 / 2)。因此,如果您在执行上述 (1) 之后没有看到另一个圆圈,请尝试将您的实时视图放大,例如 768x1024,或者在按住选项的同时使用 shift 键将另一个圆圈拖到视图中。这很棘手,但可以做到;您必须将鼠标移动到实时视图的右侧,按住 option + shift,拖动到实时视图的左侧,释放 shift(但 不是选项),拖动到右侧再次,然后再重复几次,直到看到两个灰色圆圈。

    证明这可以在操场上完成:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-20
      • 2013-04-29
      • 2020-01-05
      • 2021-01-02
      • 1970-01-01
      • 1970-01-01
      • 2021-04-03
      相关资源
      最近更新 更多