2017-04-25 7 views
1

edit: J'ai mis à jour le code de la question pour qu'il fonctionne maintenant au cas où cela aiderait quelqu'un.Swift3 Zoom comment changer UICollectionVoir la taille de l'image à la rigueur?

J'ai un scrollView dans un UICollectionViewCell mais je ne peux pas obtenir le zoom pour travailler dans le simulateur avec pincement. Je peux obtenir cela en zoomant manuellement sur la vue, mais j'ai besoin de changer le cadre de vue de l'image en taille réelle lorsque l'utilisateur pince pour zoomer. À l'heure actuelle, il s'agit de la taille à remplir avec la largeur du cadre définie sur la largeur de l'écran et la hauteur du cadre définie sur la hauteur de l'écran. J'ai besoin de changer dynamiquement la largeur du cadre pour égaler la hauteur du cadre car l'image est carrée.

Voici mon code:

import UIKit 

class MyCollectionViewCell: UICollectionViewCell, UIScrollViewDelegate { 

    let screenWidth = UIScreen.main.bounds.width 

    let activityIndicator: UIActivityIndicatorView = { 
     let spinner = UIActivityIndicatorView() 
     spinner.activityIndicatorViewStyle = .white 
     spinner.color = Constants.APP_SPINNER_COLOR 
     spinner.hidesWhenStopped = true 
     return spinner 
    }() 

    var zoomScrollView: UIScrollView = { 
     let scrollView = UIScrollView() 
     scrollView.backgroundColor = .white 
     scrollView.minimumZoomScale = 1.0 
     scrollView.maximumZoomScale = 6.0 
     scrollView.clipsToBounds = true 
     scrollView.isUserInteractionEnabled = true 
     scrollView.translatesAutoresizingMaskIntoConstraints = false 
     return scrollView 
    }() 

    var itemImageView: UIImageView = { 
     let imageView = UIImageView() 
     imageView.contentMode = .scaleAspectFit 
     imageView.translatesAutoresizingMaskIntoConstraints = false 
     imageView.backgroundColor = .white 
     imageView.isUserInteractionEnabled = true 
     return imageView 
    }() 

    func viewForZooming(in zoomScrollView: UIScrollView) -> UIView? { 
     return itemImageView 
    } 

    override init(frame: CGRect) { 
     super.init(frame: frame) 

     zoomScrollView.delegate = self 

     contentView.backgroundColor = .white 

     contentView.addSubview(zoomScrollView) 

     zoomScrollView.addSubview(itemImageView) 

     itemImageView.addSubview(activityIndicator) 


    zoomImageView.frame = CGRect(x:0, y:0, width: screenWidth, height: screenHeight) 

    zoomScrollView.frame = itemImageView.frame 

     activityIndicator.anchorCenterXToSuperview() 
     activityIndicator.anchorCenterYToSuperview()  
    } 

    required init?(coder aDecoder: NSCoder) { 
      fatalError("init(coder:) has not been implemented") 
     } 
} 
+0

Qu'est-ce que ZoomimageView et Zoomscrollview –

Répondre

1

ici Faire une démo simple de la vue défilement.

Note: Ne donner aucune contrainte à la vue de l'image

Ci-dessous le code pour scrollview:

import UIKit 

class ViewController: UIViewController,UIScrollViewDelegate { 

    var imgDemo: UIImageView = { 
     let img = UIImageView() 
     img.contentMode = .scaleAspectFill 
     img.isUserInteractionEnabled = true 
     return img 
    }() 


    var scrollView:UIScrollView = { 
     let scroll = UIScrollView() 
     scroll.maximumZoomScale = 4.0 
     scroll.minimumZoomScale = 0.25 
     scroll.clipsToBounds = true 
     return scroll 
    }() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     imgDemo.frame = CGRect(x: 0, y: 0, width: view.frame.size.width, height: view.frame.size.height) 
     imgDemo.image = UIImage(named: "5.jpg") 
     scrollView.delegate = self 
     scrollView.frame = imgDemo.frame 
     scrollView.addSubview(imgDemo) 
     view.addSubview(scrollView) 
    } 

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

} 
+0

J'ai besoin que cette vue corresponde à .scaleAspectfit jusqu'à ce que je la pince et ensuite je la veux à scaleAspectFill, comment puis-je faire ça? – markhorrocks

+0

Ohk alors faites-le par vous-même parce que je ne sais pas comment faire ça. –

+0

J'ai mis à jour la question afin que mon code fonctionne maintenant. Ce qui manquait auparavant, c'est que j'avais défini le scrollView.userInteraction sur false. Merci pour votre contribution concernant les cadres. – markhorrocks

1
+0

je définir la taille du contenu de vue de défilement pour être le double la largeur de l'écran et la hauteur de l'écran. Je ne peux pas le tester correctement sur le simulateur car il ne va pas pincer l'expansion. Est-ce que ça sonne bien? – markhorrocks