iphone - una - Cómo habilitar el zoom en UIScrollView
lupa en iphone 8 (6)
¿Cómo se puede activar el efecto de zoom en UIScrollView?
Asegúrese de configurar su viewController como delegar e implementar scrollViews:
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return imageView
}
Compruebe tucan9389/ZoomableScrollView bifurcado desde huynguyencong / ImageScrollView.
Simplemente cree ZoomableScrollView
y llame a display(view:)
.
MANIFESTACIÓN
Uso
import ZoomableScrollView
class ViewController: UIViewController
@IBOutlet weak var zoomableScrollView: ZoomableScrollView!
override func viewDidLoad() {
super.viewDidLoad()
let myView = MyCustomView()
zoomableScrollView.display(view: myView)
}
}
Echa un vistazo a this video
Descripción del video:
- Añadir delegado
UIScrollViewDelegate
- Toma un
UIScrollView
- Toma un UIImageView que se agregará en Scrollview
- Coloque la vista de desplazamiento en la ventana principal
- Conecte a los delegados
- Configurar imageView
- Establezca la escala de zoom máx. / Min. [Lo esencial aquí]
- Implementar método delegado para devolver la vista
La respuesta está here :
La vista de desplazamiento también maneja el zoom y la panorámica del contenido. A medida que el usuario realiza un gesto de pellizco o pellizco, la vista de desplazamiento ajusta el desplazamiento y la escala del contenido. Cuando el gesto finaliza, el objeto que gestiona la vista de contenido debería actualizar las subvistas del contenido según sea necesario. (Tenga en cuenta que el gesto puede finalizar y que el dedo aún podría estar hacia abajo.) Mientras el gesto está en progreso, la vista de desplazamiento no envía ninguna llamada de seguimiento a la subvista.
La clase UIScrollView puede tener un delegado que debe adoptar el protocolo UIScrollViewDelegate. Para que el zoom y la panorámica funcionen, el delegado debe implementar tanto viewForZoomingInScrollView: y scrollViewDidEndZooming: withView: atScale :; además, la escala de zoom máxima (máximaZoomScale) y mínima (mínimaZoomScale) debe ser diferente.
Asi que:
- Necesita un delegado que implemente
UIScrollViewDelegate
y esté configurado paradelegate
en su instancia deUIScrollView
- En su delegado, debe implementar un método:
viewForZoomingInScrollView:
( que debe devolver la vista de contenido que le interesa ampliar ). También puede implementarscrollViewDidEndZooming:withView:atScale:
opcionalmente. - En su instancia de
UIScrollView
, debe configurar elminimumZoomScale
y elmaximumZoomScale
para que sean diferentes (son 1.0 por defecto).
Nota: Lo interesante de esto es qué pasa si quieres interrumpir el zoom. ¿Es suficiente devolver nil
en el método viewForZooming...
? Se rompe el zoom, pero algunos de los gestos se desordenarán (por dos dedos). Por lo tanto, para interrumpir el zoom, debe establecer la escala mínima y máxima del zoom en 1.0.
Lea este tutorial de Ray Wenderlich:
http://www.raywenderlich.com/76436/use-uiscrollview-scroll-zoom-content-swift
Si sigue la sección ''Desplazamiento y zoom de una imagen más grande'' obtendrá una imagen y le permitirá pellizcar y hacer zoom.
En caso de que el enlace se modifique, aquí está la información principal: Ponga este código en su controlador de vista (esto establece la funcionalidad principal):
override func viewDidLoad() {
super.viewDidLoad()
// 1
let image = UIImage(named: "photo1.png")!
imageView = UIImageView(image: image)
imageView.frame = CGRect(origin: CGPoint(x: 0, y: 0), size:image.size)
scrollView.addSubview(imageView)
// 2
scrollView.contentSize = image.size
// 3
var doubleTapRecognizer = UITapGestureRecognizer(target: self, action: "scrollViewDoubleTapped:")
doubleTapRecognizer.numberOfTapsRequired = 2
doubleTapRecognizer.numberOfTouchesRequired = 1
scrollView.addGestureRecognizer(doubleTapRecognizer)
// 4
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;
// 5
scrollView.maximumZoomScale = 1.0
scrollView.zoomScale = minScale;
// 6
centerScrollViewContents()
}
Agrega esto a la clase:
func centerScrollViewContents() {
let boundsSize = scrollView.bounds.size
var contentsFrame = imageView.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
}
imageView.frame = contentsFrame
}
Y luego esto si quieres que se reconozca el gesto de doble toque:
func scrollViewDoubleTapped(recognizer: UITapGestureRecognizer) {
// 1
let pointInView = recognizer.locationInView(imageView)
// 2
var newZoomScale = scrollView.zoomScale * 1.5
newZoomScale = min(newZoomScale, scrollView.maximumZoomScale)
// 3
let scrollViewSize = scrollView.bounds.size
let w = scrollViewSize.width / newZoomScale
let h = scrollViewSize.height / newZoomScale
let x = pointInView.x - (w / 2.0)
let y = pointInView.y - (h / 2.0)
let rectToZoomTo = CGRectMake(x, y, w, h);
// 4
scrollView.zoomToRect(rectToZoomTo, animated: true)
}
Si desea más detalles, lea el tutorial, pero eso lo cubre.
No creo que esto funcione para iOS 5.0 y Xcode 4.3+ Estoy buscando lo mismo aquí, encontré que esto es para imágenes, pero puede ayudarte.