UIScrollView Zoom Images macht Probleme

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • UIScrollView Zoom Images macht Probleme

    Hallo,

    ich arbeite gerade daran eine ScrollView, Zoom fähig zu machen. Dafür nutze ich folgende Funktionen:


    Quellcode

    1. func viewForZooming(in scrollView: UIScrollView) -> UIView? {
    2. return VotingScrollView.viewWithTag(99)
    3. }
    4. func scrollViewDidEndZooming(_ scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat) {
    5. VotingScrollView.setZoomScale(0.0, animated: true)
    6. VotingScrollView.contentSize = CGSize(width: contentWidth, height: VotingScrollView.frame.size.height)
    7. }
    Das zoomen funktioniert auch. Jedoch befinden sich in der ScrollView mehr als nur ein Bild...
    Zoome ich jetzt also an ein Bild ran, dann kommt während des Zoomens ein Bild von rechts in den Screen rein. Scheint als würde sich der Zoom auf die gesamte ScrollView auswirken und nicht nur auf mein Fenster.

    Gibt es eine Möglichkeit das zu beschränken ? Wenn ich zoome dann möchte ich, dass in der ScrollView auch nur das eine Bild gezoomt wird und der Rest sich normal verhält.
  • Ich verstehe Deine Aussage nicht ganz: In einer UIScrollView sollte sich eine View befinden (die natürlich subViews haben kann) und diese wird gezoomt. Du kannst nicht einfach eine subView in der Delegate-Methode verwenden. Denkst Du eventuell an eine UICollectionView, in der die Items einzeln gezoomt werden können, vergleichbar der Foto-App?

    Ausserdem finde ich ein zoomScale von 0 irritierend...

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Achso tut mir leid, dass das nicht nicht deutlich wurde. Du hast recht, in meiner ScrollView befindet sich eine ImageView die, die unterschiedlichen Bilder beinhaltet. Diese ImageView innerhalb meiner ScrollView soll Zoom ermöglichen. Das zoomen an sich funktioniert ja wie gesagt auch, nur leider wird nicht nur das sichtbare Bild gezoomt, sondern auch die rechts und links daneben liegenden Images.

    Der zoomScale von 0 ist auch nur dazu da, um das Bild nach dem zoomen wieder in seine Ausgangslage zurück zu befördern.

    Dein Beispiel ist aber treffend. Die Foto App kann das tatsächlich auch. Ein vielleicht noch besseres Beispiel ist Instagram. Genau die Art von Zoom versuche ich umzusetzen. Aber das die Items einzeln gezoomt werden können sollte doch auch für die ScrollView funktionieren oder nicht ?

    EDIT:
    Außerdem ist mir aufgefallen das ich nur das erste Image in der ScrollView zoomen kann, wenn ich zum zweiten rüber swipe und dieses zoomen möchte, springt er automatisch zum ersten Image zurück und zoomt das stattdessen...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von ThisIsBeat ()

  • ThisIsBeat schrieb:


    Ein vielleicht noch besseres Beispiel ist Instagram. Genau die Art von Zoom versuche ich umzusetzen. Aber das die Items einzeln gezoomt werden können sollte doch auch für die ScrollView funktionieren oder nicht ?
    Ich habe kein Instagram ... aber "Nein": Meines Wissens unterstützt das die verwendete Methode des UIScrollViewDelegate nicht: Sie zoomt die übergebene contentView und davon gibt es genau eine. Sicherlich hindert Dich niemand, eine eigene Implementierung zu schreiben, die ein Panning auf einer Subview erkennt und diese dann animiert zoomt. Stelle ich mir aber beliebig kompliziert vor, insbesondere in Zusammenspiel mit den UIGestureRecognizern, die schon von der UIScrollView in Verwendung sind.

    Diese Zeit würde ich wie gesagt eher in eine Recherche bzgl. UICollectionView investieren, insbesondere angesichts der Tatsache, dass Apple deren Verwendung massiv pusht. Dann kannst Du ein Zooming bei long taps leicht per Delegate-Methode collectionView:willPerformPreviewActionForMenuWithConfiguration:animator: implementieren ... bei Bedarf mit eigenen Animationen etc.

    Für mich sieht es so aus, als wolltest Du partout einen Nagel mit einer Zange einschlagen...

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.