2009-11-27 17 views
7

Tengo un IKImageBrowserView que quiero poder pellizcar y hacer zoom utilizando un panel táctil multitáctil en una computadora portátil Mac reciente.Cómo interpretar los gestos de pellizco del panel táctil para acercar IKImageBrowserView

El Evento Cocoa Guía de manipulación, en la sección Handling Gesture Events dice: método de acceso

La ampliación devuelve un valor de punto flotante (CGFloat) que representa un factor de magnificación

.. y continúa mostrando código que ajusta el tamaño de la vista al multiplicar alto y ancho por magnification + 1.0.

Esto no parece ser el enfoque correcto para hacer zoom IKImageBrowserView, cuya propiedad zoomValue está sujeta entre 0.0 y 1.0.

Entonces, ¿alguien sabe cómo interpretar el evento en -[NSResponder magnifyWithEvent:] para ampliar IKImageBrowserView?

Respuesta

14

Esto es lo que hago, en Snow Leopard, funciona perfectamente bien:

En 10.6, NSEvent tiene el método de "ampliación" que devolverá la cantidad correcta ya. Todo lo que tiene que hacer es agregar esto al valor anterior, como [imageBrowser zoomValue]+[event magnification].

- (void)magnifyWithEvent:(NSEvent *)event 
{ 
    if ([event magnification] > 0) 
    { 
     if ([self zoomValue] < 1) 
     { 
      [self setZoomValue:[self zoomValue] + [event magnification]]; 
     } 
    } 
    else if ([event magnification] < 0) 
    { 
     if ([self zoomValue] + [event magnification] > 0.45) 
     { 
      [self setZoomValue:[self zoomValue] + [event magnification]]; 
     } 
     else 
     { 
      [self setZoomValue:0.45]; 
     } 
    } 
} 

self aquí es una subclase IKImageBrowserView. Aquí tengo un umbral para que el zoomValue no pueda tener un tamaño inferior a 0,45, pero así es como me gusta.

Saludos cordiales, Matthias , tormentas eterna Software

+0

Funciona perfectamente. Gracias. –

4

Si se agrega el aumento de evento a su factor de zoom, el mismo evento no tendrán el mismo efecto en función del factor de zoom actual. Si agrega un aumento de 0.1 a un factor de zoom de 1, se ampliará por 10%, pero si el factor de zoom es 0.1, al agregar 0.1 se duplicará el zoom.

El resultado de multiplicar el factor de zoom por magnification + 1.0 será más uniforme.

Prefiero multiplicar el factor de zoom por std::exp(magnification), ya que parece ser una solución más natural. Un aumento de -n alejará exactamente en la misma cantidad que un aumento de n acercamientos.

Cuestiones relacionadas