2017-03-11 1 views
0

Das macht mich verrückt!Swift 3 UIScrollview nicht fragen Zoomen

Ich basiere meine UIScrollView auf http://koreyhinton.com/blog/uiscrollview-crud.html, um es programmatisch zu machen, also habe ich eine Containeransicht in meinem scrollview eingerichtet. Aber es schwenkt, aber wird nicht zoomen.

Klasse BinaryTreeViewController: UIViewController, UIScrollViewDelegate {

var scrollView: UIScrollView! 
var containerView : UIView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let width:CGFloat = self.view.bounds.width 
    let height:CGFloat = self.view.bounds.height 

    scrollView = UIScrollView() 
    scrollView.delegate = self 
    scrollView.minimumZoomScale = 0.5 
    scrollView.maximumZoomScale = 2.0 
    scrollView.contentSize = CGSize(width: width*2, height: 2000) 

    scrollView.backgroundColor = .red 
    containerView = UIView() 

    scrollView.addSubview(containerView) 
    view.addSubview(scrollView) 

    containerView.isUserInteractionEnabled = true 
    scrollView.isUserInteractionEnabled = true 
} 

override func viewDidLayoutSubviews() { 

    super.viewDidLayoutSubviews() 

    scrollView.frame = view.bounds 
    containerView.frame = CGRect(x: 0, y: 0, width: scrollView.contentSize.width, height: scrollView.contentSize.height) 
} 



override func viewWillLayoutSubviews() { 
     //I create a view called "theView" 
     containerView.addSubview(theView) 
} 

Folgende Funktionen werden nicht ausgelöst an jedem Punkt

func update(zoomScale: CGFloat, offSet: CGPoint) { 
    scrollView.zoomScale = zoomScale 
} 

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

func scrollViewDidZoom(_ scrollView: UIScrollView) { 
    NSLog("scroll") 
} 

Antwort

1

Sie wirklich brauchen nicht zu diesem Zweck so viel Code zu tun. Sie können alles, was Sie für scrollView im Storyboard benötigen, einrichten, und Sie benötigen nur einen Ausgang für die Ansicht, die Sie zoomen möchten. Richten Sie einen Controller ein, fügen Sie eine Bildlaufansicht hinzu, verbinden Sie die Delegate-Eigenschaft mit dem Controller, fügen Sie die Zoom-Ansicht als Unteransicht in IB hinzu.

In der Klasse konforme Controller zu UIScrollViewDelegate, und verwenden Sie ViewForZooming, eine ScrollView-Delegate-Methode.

class ViewController: UIViewController, UIScrollViewDelegate { 

@IBOutlet weak var zoomer: UIImageView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func viewForZooming(in scrollView: UIScrollView) -> UIView? { 
     return zoomer 
    } 
} 

P.S. Verwenden Sie neuere Ressourcen zum Lernen, Ray Wenderlich, AppCoda usw. - es ist ein großes Netz voller guter Quellen und Swift ist in ständiger Veränderung.

+0

Danke dafür. Für jeden, der in Zukunft die Lösung benötigt, hat folgendes funktioniert. Das Problem mit Tutorials ist, dass es Probleme gibt, sobald ich sie auf ein Projekt anwende - zum Beispiel, hier bin ich programmatisch Unterklasse einer UI-View, so dass es schwierig ist. Gerade jetzt finde ich die Dokumente außerhalb von Basic Swift herausfordernd. Wie auch immer, hier ist der Code: func viewForZooming (in scrollView: UIScrollView) -> UIView? { NSLog ("zum Zoomen scrollen") retain containerView } – stevenpcurtis

Verwandte Themen