2010-09-07 18 views

Respuesta

8

Tenga una mirada en this vídeo

Descripción del vídeo:

  • Añadir UIScrollViewDelegate delegado
  • Tome un UIScrollView
  • Tome un UIImageView que va a ser añadido en ScrollView
  • Coloque la vista de desplazamiento en la ventana principal
  • Conectar los delegados
  • Configuración imageView
  • escala Conjunto máx/mín de zoom [Lo central aquí]
  • implementar el método delegado para volver la vista
+27

@Jigar Joshi, su respuesta no es una respuesta, en realidad. No estoy seguro de por qué le pediste al OP que lo aceptara. Ahora tengo que ir a ver el video para recordar la respuesta a esta simple pregunta. –

+0

@Yar si OP acepta + upvotes significa que su pregunta ha sido respondida con éxito. si tiene una pregunta diferente en mente, entonces no es la respuesta para esa pregunta. por favor devuelva su voto negativo improcedente –

+3

@Jigar Joshi, no se puede revertir el voto atrasado ya que es demasiado tarde. Tendría que cambiar su respuesta. ¿Por qué no agregar algunas instrucciones sobre cómo hacer lo que el OP quería hacer, que no requieren ver un video? –

171

respuesta es here:

Los la vista de desplazamiento también maneja el zoom y la panorámica del contenido. Cuando el usuario realiza un gesto de pellizco o de pinzamiento, la vista de desplazamiento ajusta el desplazamiento y la escala del contenido. Cuando termina el gesto , el objeto que gestiona la vista de contenido debe actualizar las subvistas según sea necesario. (Tenga en cuenta que el gesto puede finalizar y un 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 hacer zoom y paneo para trabajar, el delegado debe implementar ambos viewForZoomingInScrollView: y scrollViewDidEndZooming: withView: atScale :; Además, la escala de zoom máxima (maximumZoomScale) y mínima ( minimumZoomScale) debe ser diferente.

Así:

  1. Se necesita un delegado que implementa UIScrollViewDelegate y está previsto que delegate en su UIScrollView ejemplo
  2. En su delegado tiene que poner en práctica un método: viewForZoomingInScrollView: (, que debe devolver el Vista de contenido que le interesa ampliar). También puede implementar scrollViewDidEndZooming:withView:atScale: opcionalmente.
  3. En su instancia UIScrollView, debe configurar minimumZoomScale y maximumZoomScale para que sean diferentes (son 1.0 por defecto).

Nota: Lo interesante de esto es lo que si quieres ruptura 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.

+16

Excelente respuesta - esto me consiguió exactamente lo que necesitaba. (Además, ¡no tuve que ir a ver un video!;) – Olie

+1

gracias. lo más importante es el segundo paso aquí, que no se encuentra en la respuesta original – thgc

+1

muy buena respuesta! – Microns

-1

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 ayudarle.

http://www.youtube.com/watch?v=Ptm4St6ySEI

+0

no es necesario configurar el tamaño del contenido de scrollview y la solución anterior funciona perfectamente en Xcode 4.3+ y iOS 5.0 también – Deepak

+1

Aunque esta es una respuesta potencialmente bastante buena, es esencialmente una respuesta ** "solo vínculo" **. Debe incluir cierta información de sus enlaces para que si la información detrás de los enlaces se cambia o se pierde alguna vez, la respuesta todavía tenga sentido. Ver [este enlace] (http://meta.stackexchange.com/questions/225370/your-answer-is-in-another-castle-when-is-an-answer-not-an-answer) –

6

tener una lectura a través de este tutorial Ray Wenderlich:

http://www.raywenderlich.com/76436/use-uiscrollview-scroll-zoom-content-swift

Si usted sigue a través de la sección de 'desplazamiento y zoom de una imagen ampliada' se obtendrá una imagen y le permitirá pellizcar y hacer zoom

En caso de que el enlace se altera, aquí está la información principal: Pon este código en tu 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() 
} 

añadir 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 entonces esto si desea que el gesto de tocar dos veces para ser reconocido:

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.

+1

Aunque esto es una respuesta potencialmente bastante buena, es esencialmente una respuesta ** "solo enlace" **. Debe incluir cierta información de sus enlaces para que si la información detrás de los enlaces se cambia o se pierde alguna vez, la respuesta todavía tenga sentido. Ver [este enlace] (http://meta.stackexchange.com/questions/225370/your-answer-is-in-another-castle-when-is-an-answer-not-an-answer) –

0

Asegúrese de ajustar su viewController como el delegado scrollViews y poner en práctica:

func viewForZooming(in scrollView: UIScrollView) -> UIView? { 
    return imageView 
} 
Cuestiones relacionadas