游乐场中的 UIPanGestureRecognizer
Posted
技术标签:
【中文标题】游乐场中的 UIPanGestureRecognizer【英文标题】:UIPanGestureRecognizer in Playgrounds 【发布时间】: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 中测试捏合手势?
【问题讨论】:
【参考方案1】:您实际上可以在游乐场中使用选项键来做两指手势,但这有点挑剔。
-
您需要确保先单击实时视图。有时这不起作用 - 如果没有,请继续重新运行您的 Playground,直到您将鼠标悬停在实时视图上时光标变成一个小手。然后单击查看并保留选项。您应该会在鼠标指针周围看到至少一个灰色圆圈。
代表你两根手指的两个灰色圆圈的起始中心点实际上有点奇怪。在我的实验中,它总是在
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(但 不是选项),拖动到右侧再次,然后再重复几次,直到看到两个灰色圆圈。
证明这可以在操场上完成:
【讨论】:
以上是关于游乐场中的 UIPanGestureRecognizer的主要内容,如果未能解决你的问题,请参考以下文章
xcode 游乐场中的 UITableView 不显示文本/字幕
Swift 4.2,Xcode 游乐场中的 String firstIndex() 函数错误
Sources 文件夹中的文件无法访问 Xcode 游乐场中其他文件的公共类或函数