Swift:如何启用CALayer的捏缩放?

我一直在试图滚动和缩放几个多边形path的CALayer,特别是CAShapeLayer。 我将CALayer添加到已成功启用CALayer滚动的UIScrollView。

但是,捏缩放不能正常工作。 有几个教程已经实现了使用UIScrollViewDelegate缩放UIImageView,就像这样:

@IBOutlet var scrollView : UIScrollView! var imageView = UIImageView() scrollView.addSubview(imageView) func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? { return imageView } 

但CALayer与UIView不兼容,我没有find任何有关调和差异的信息。

有没有一种类似的本地方式来缩放在雪花CALayer? 这件事真的很简单吗? 任何帮助,将不胜感激; 道歉,如果我错过了显而易见的。

经过大量的挖掘,我find了苹果的相关文档 。 如果设置正确,则会在CALayers上自动处理捏缩缩放。 我改编了Swift的演示代码,想出了这个基本的结构,这对我来说很合适。

 class ViewController: UIViewController, UIScrollViewDelegate { @IBOutlet var scrollView : UIScrollView! var layerView = UIView() var shapeLayer= CAShapeLayer() func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? { return layerView // Specify the layer to scroll, cannot be the UIScrollView used for scrolling } func scrollViewDidEndZooming(scrollView: UIScrollView, withView view: UIView!, atScale scale: CGFloat) { // This was noted as required but no inner code is necessary } override func viewDidLoad() { super.viewDidLoad() layerView.layer.addSublayer(shapeLayer) // Attach layer to the canvas view scrollView.addSubview(layerView) // Attach the views // ... Add layer content, set max and min scaling values as well as layer/view sizes to encompass content } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } } 

我希望这可以帮助别人!