2017-06-02 1 views
0

Ich habe ein Scrollview programmgesteuert erstellt und ein Bild als Unteransicht hinzugefügt, aber wenn ich versuche, in das Bild zu zoomen, zoomt es nur in die obere Ecke und lässt mich nicht herumrollen Sehen Sie verschiedene Teile des Bildes.Scrollview zoomt nur zur oberen linken Ecke

Hier ist der Code, den ich verwendet, um die Scrollview zu erstellen:

let scrollView = UIScrollView() 

var image: NSData! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    scrollView.minimumZoomScale = 1.0 
    scrollView.maximumZoomScale = 3.0 
    scrollView.zoomScale = 1.0 
    scrollView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height) 
    scrollView.delegate = self 
    scrollView.isPagingEnabled = false 
    scrollView.contentSize = CGSize(width: self.view.frame.width, height: self.view.frame.height) 

    view.addSubview(scrollView) 

    scrollView.addSubview(imageView) 

    imageView.image = UIImage(data: image as Data) 
    imageView.contentMode = .scaleAspectFit 
    imageView.isUserInteractionEnabled = true 

    let longPress = UILongPressGestureRecognizer(target: self, action: #selector(share)) 
    longPress.minimumPressDuration = 0.5 
    longPress.numberOfTapsRequired = 0 
    imageView.addGestureRecognizer(longPress) 

    let doubleTap = UITapGestureRecognizer(target: self, action: #selector(handleDoubleTap(recognizer:))) 
    doubleTap.numberOfTapsRequired = 2 
    scrollView.addGestureRecognizer(doubleTap) 

} 

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

func share(sender: UILongPressGestureRecognizer) { 
    if sender.state == .ended { 
     if UIImage(data: image as Data) != nil { 
      let Item = UIImage(data: self.image! as Data) 
      let activity = UIActivityViewController(activityItems: [Item!], applicationActivities: nil) 
      activity.excludedActivityTypes = [UIActivityType.print, UIActivityType.addToReadingList, UIActivityType.openInIBooks] 
      self.present(activity, animated: true, completion: nil) 
     } 
    } 
} 

func handleDoubleTap(recognizer: UITapGestureRecognizer) { 
    if scrollView.zoomScale > scrollView.minimumZoomScale { 
     scrollView.setZoomScale(scrollView.minimumZoomScale, animated: true) 
    } else { 
     scrollView.setZoomScale(scrollView.maximumZoomScale, animated: true) 
    } 
} 

Vielen Dank für jede Art von Hilfe

+0

wo ist imageview frame? – Daniel

+0

AS pro Ihre Frage überprüfen Sie bitte meine Antwort in https://stackoverflow.com/questions/43624834/uiimageview-zoom-and-pinch-in-uiscrollview/43626273#43626273 –

Antwort

1

Das Problem in Ihrem Code, wenn Sie die zoomscale Ihrer Scroll eingestellt. Sie geben nicht an, wo genau gezoomt werden soll. So zoomt es natürlich und bleibt in der oberen linken Ecke.

Sie müssen die Position der Berührung in Ihrem handleDoubleTap(recognizer: UITapGestureRecognizer) erhalten, berechnen Sie die Rect für Zoom und rufen Sie scrollRectToVisible auf Ihrem Scrollview.

+0

Die handleDoubleTap wird nur verwendet, wenn der Benutzer zweimal tippen dass es hinein- oder herauszoomen wird. Aber es zoomt auch nur zur oberen linken Ecke, wenn ich einfach mit meinen Fingern heranzoome. –

+0

Verwenden Sie Autolayout oder Einschränkungen? –

+0

Ja, ich habe Einschränkungen für die Bildansicht verwendet, die sich in der Bildlaufansicht befindet. –

Verwandte Themen