[Résolu] UIScrollView dans un masque dans un autre UIScrollView

busterTheobusterTheo Membre
mars 2015 modifié dans API UIKit #1

Bonjour,


je n'ai pas de question à  formuler, si ce n'est d'attendre un retour de critiques qui seront fort appréciées.


 


En attendant, mon truc, ça marche, et donc si quelqu'un de débutant comme moi est intéressé, voici un lien vidéo qui montre l'effet, et le code associé, plus bas. J'utilise, entre autres, une fonction de Ray Wenderlich (centerScrollViewContents), à  laquelle j'ai rajouté un paramètre (un UIScrollView), pour pouvoir l'utiliser pour les deux UIScrollViews du projet, en testant la UIScrollView transmise.


:p



import UIKit

class ViewController: UIViewController, UIScrollViewDelegate {

// Mark: - Les variables

// Pour la fonction centerScrollViewContents
var maView: UIImageView!

// La photo plein-écran
var myView: UIView!
var myScrollView:UIScrollView = UIScrollView()
var myImageView = UIImageView()

// La photo dans le masque
var myViewParentMask: UIView!
var myScrollTextureView:UIScrollView = UIScrollView()
var myTextureView = UIImageView()

// Le masque et son contour
var myMaskView = UIImageView()
var myMaskContourView = UIImageView()

// Toggle button masque
var boolHiddenParent = true

// MARK: - Actions

@IBAction func masqueButton(sender: AnyObject) {
if boolHiddenParent == true {
myViewParentMask.hidden = false
boolHiddenParent = false
} else {
myViewParentMask.hidden = true
boolHiddenParent = true
}
}

// Mark: - View Life Cycle

override func viewDidLoad() {
super.viewDidLoad()

var mainScreenSize : CGSize = UIScreen.mainScreen().bounds.size

// La vue englobante de la photo plein-écran
myView = UIView(frame: CGRectMake(0, 45, mainScreenSize.width, mainScreenSize.height))
self.view.addSubview(myView)

// La scrollView qui contient la imageView de la photo plein-écran
myScrollView.delegate = self
myScrollView.frame = CGRectMake(0, 0, mainScreenSize.width, mainScreenSize.height)
myView.addSubview(myScrollView)

// La imageView de la photo plein-écran
let myImage = UIImage(named: "sourire2.png")!
myImageView.image = myImage
myImageView.frame = CGRectMake(40 + (mainScreenSize.width - myImage.size.width)/2, -265 + (mainScreenSize.height - myImage.size.height)/2, myImage.size.width, myImage.size.height)
myScrollView.addSubview(myImageView)

myScrollView.userInteractionEnabled = true

myScrollView.minimumZoomScale = 2
myScrollView.maximumZoomScale = 8
myScrollView.zoomScale = 2

centerScrollViewContents(myScrollView)

// La photo masquée
let myTexture = UIImage(named: "texture.png")!

// La vue englobante de la photo dans le masque
myViewParentMask = UIView(frame: CGRectMake((mainScreenSize.width - myTexture.size.width)/2, (mainScreenSize.height - myTexture.size.height)/2, myTexture.size.width, myTexture.size.height))
self.view.addSubview(myViewParentMask)

myViewParentMask.hidden = true

// La scrollView qui contient la imageView de la photo à  masquer
myScrollTextureView.delegate = self
myScrollTextureView.frame = CGRectMake(0, 0, myTexture.size.width, myTexture.size.height)
myViewParentMask.addSubview(myScrollTextureView)

// La imageView de la photo à  masquer
myTextureView = UIImageView(frame: CGRectMake(0, 0, myTexture.size.width, myTexture.size.height))
myTextureView.image = myTexture
myScrollTextureView.addSubview(myTextureView)

myScrollTextureView.userInteractionEnabled = true

myScrollTextureView.minimumZoomScale = 1
myScrollTextureView.maximumZoomScale = 8
myScrollTextureView.zoomScale = 1

centerScrollViewContents(myScrollTextureView)

// La imageView du masque
myMaskView = UIImageView(frame: CGRectMake(0, 0, myTexture.size.width, myTexture.size.height))
// La photo du masque
myMaskView.image = UIImage(named: "masque1.png")
myViewParentMask.addSubview(myMaskView)

// Le masking
myViewParentMask.maskView = myMaskView
}


func centerScrollViewContents(scrollView: UIScrollView) {
var boundsSize = myScrollView.bounds.size
var contentsFrame = myImageView.frame

if scrollView == myScrollTextureView {
boundsSize = myScrollTextureView.bounds.size
contentsFrame = myTextureView.frame
}
if scrollView == myScrollView {
boundsSize = myScrollView.bounds.size
contentsFrame = myImageView.frame
}

if contentsFrame.size.width < boundsSize.width {
contentsFrame.origin.x = (boundsSize.width - contentsFrame.size.width) / 2.0
} else {
contentsFrame.origin.x = 0.0
}

if contentsFrame.size.height < boundsSize.height {
contentsFrame.origin.y = (boundsSize.height - contentsFrame.size.height) / 2.0
} else {
contentsFrame.origin.y = 0.0
}

if scrollView == myScrollTextureView {
myTextureView.frame = contentsFrame
}
if scrollView == myScrollView {
myImageView.frame = contentsFrame
}
}

func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
if scrollView == myScrollTextureView {
maView = myTextureView
}
if scrollView == myScrollView {
maView = myImageView
}
return maView
}

func scrollViewDidZoom(scrollView: UIScrollView!) {
centerScrollViewContents(scrollView)
}
}


Mots clés:

Réponses

  • Je pense que le "scroll indicator" qui est parfois visible dans la vidéo gagnerait à  être masqué.


  • Salut, t'as bien raison, j'achète.


     


    J'ai cherché et trouvé (showsHorizontalScrollIndicator et showsVerticalScrollIndicator).


    Merci pour ta super remarque.


Connectez-vous ou Inscrivez-vous pour répondre.