2015-08-25 1 views
0

Я пытался прокручивать и масштабировать CALayer, в частности CAShapeLayer, из нескольких полигональных дорожек. Я добавил CALayer в UIScrollView, который успешно включил прокрутку вокруг CALayer.Swift: Как включить масштабирование для CALayer?

Тем не менее, щепотка для увеличения не работает. Некоторые учебники реализовали масштабирование в UIImageView с UIScrollViewDelegate в основном нравится так:

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

func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? { 
    return imageView 
} 

Но CALayer несовместима с UIView, и я не нашел никакой информации о согласовании разницы.

Есть ли аналогичный родной способ масштабирования CALayer в Swift? Это что-то действительно простое, что ускользнуло от меня? Любая помощь будет оценена по достоинству; извиняюсь, если я пропущу очевидное.

ответ

2

После долгого поиска я нашел связанный documentation from 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() 
    } 
} 

Я надеюсь, что это поможет кому-то еще!