Comprenez-vous ce code du zoom?
Salut,
est-ce que vous comprenez la logique du zoom avec ce code :
on commence avec un bounds à 320,538
on double tap, on arrive à 600 et quelques, la photo s'élargit sur l'écran
puis...
le calcul de maths fait que le bounds diminue, et on revient à 320, 538, mais la photo est complètement zoomée. Comment ça se fait? J'aurai imaginé que le bounds.size s'agrandisse de plus en plus, alors qu'il diminue et revient à ses dimensions de départ (mais la photo a entre temps été complètement élargie) :
le résultat :
zoom depart : (320.0,568.0)
newZoomScale 0.46875
scrollViewSize.width, height : 320.0, 568.0
w,h : 682.667 1211.73
newZoomScale 0.703125
scrollViewSize.width, height : 320.0, 568.0
w,h : 455.111 807.822
newZoomScale 1.0
scrollViewSize.width, height : 320.0, 568.0
w,h : 320.0 568.0
Le code :
func scrollViewDoubleTapped(recognizer: UITapGestureRecognizer) {
let pointInView = recognizer.locationInView(imageView)
var newZoomScale = scrollView.zoomScale * 1.5
newZoomScale = min(newZoomScale, scrollView.maximumZoomScale)
println("newZoomScale \(newZoomScale)")
let scrollViewSize = scrollView.bounds.size
let w = scrollViewSize.width / newZoomScale
let h = scrollViewSize.height / newZoomScale
println("scrollViewSize.width, height : \(scrollViewSize.width), \(scrollViewSize.height)")
println("w,h : \(w) \(h)")
let x = pointInView.x - (w / 2.0)
let y = pointInView.y - (h / 2.0)
let rectToZoomTo = CGRectMake(x, y, w, h);
scrollView.zoomToRect(rectToZoomTo, animated: true)
}
//viewDidLoad
let scrollViewFrame = scrollView.frame
let scaleWidth = scrollViewFrame.size.width / scrollView.contentSize.width
let scaleHeight = scrollViewFrame.size.height / scrollView.contentSize.height
let minScale = min(scaleWidth, scaleHeight);
scrollView.minimumZoomScale = minScale;
println("zoom depart : \(scrollView.bounds.size)")
Merci
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
C'est relativement simple en réalité :
le zoom peut-être géré avec les propriétés frame et bounds de toute view.
Si frame.size == bounds.size alors zoom = 1:1
Si frame.size == bounds.size * 2 alors zoom = 1:2
Si frame.size == bounds.size / 2 alors zoom = 2:1
• Plus la taille de bounds est grande par rapport à celle de frame plus on dezoome.
• C'est inversement proportionnel.
Alors... je ne comprends pas trop. Ici, on zoome. Et bounds est plus grand que frame, la 1ère fois qu'on zoome. Puis bounds va être tout doucement égal à frame (Alors que l'image, elle, va être complètement zoomée). Donc :
Si frame.size == bounds.size * 2 alors zoom = 1:2
Si frame.size == bounds.size / 2 alors zoom = 2:1
Ca devrait être constant, selon cette règle: quand bounds est+ grand, on zoome. Or dans le code, on réduit le bounds, et ça continue de zoomer, jusqu'à ce que zoomScale soit égale à 1, et que le résultat nous donne 320,538.
Peut-être pour vérifier : le contentSize c'est le bounds? La frame c'est le rectangle qui délimite l'espace visible?
(Est-ce que tu voulais dire : si frame == bounds.size /2, c'est-à -dire, si bounds est grande par rapport à frame, on "zoome" ?)