Swift:如何为CALayer启用缩放功能?

Qui*_*gan 1 core-animation calayer uiscrollview ios swift

我一直在尝试滚动和缩放多个多边形路径的CALayer,尤其是CAShapeLayer。我将CALayer添加到了UIScrollView中,该UIScrollView已成功启用了围绕CALayer的滚动。

但是,捏变焦不起作用。一些教程已经实现了使用UIScrollViewDelegate缩放UIImageView的方法,本质上是这样的:

@IBOutlet var scrollView : UIScrollView!
var imageView = UIImageView()
scrollView.addSubview(imageView)

func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
    return imageView
}
Run Code Online (Sandbox Code Playgroud)

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

有没有类似的原生方式可以在Swift中缩放CALayer?难道真的逃脱了我吗?任何帮助,将不胜感激; 抱歉,如果我错过了明显的事情。

Qui*_*gan 5

经过大量的挖掘,我找到了Apple的相关文档。事实证明,如果设置正确,则在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()
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望这可以帮助其他人!