Así que tengo que aplicar algunas de escala y algunos de rotación de una vista (yo hago esto por medio de gestos), por cada gesto que me actualización de la actual scalling y valores de rotación con algo como:

self.scaleWidth *= gesture.scale; //When I detect an horizontal pinch
self.scaleHeight *= gesture.scale; //When I detect a vertical pinch
self.rotationAngle += gesture.rotationAngle; //When I detect a rotation

Entonces hago lo siguiente para transformar la vista:

CGAffineTransform transform = CGAffineTransformScale(CGAffineTransformIdentity, self.scaleWidth, self.scaleHeight);
self.theSubViewToTransform.transform = CGAffineTransformRotate(transform, self.rotationAngle);

Cuando yo sólo hago escala, funciona bien. Cuando hago escala, a continuación, girar, gira bien. Cuando después de rotar trato a escala de nuevo, no funciona bien: la escala se aplica como si se hace después de la rotación, deformación de mi estructura de la imagen.

Pensé que me hizo lo que era necesario hacer para evitar esto: el inicio de cada tiempo de una identidad de transformación, la escala primera, a continuación, girar, pero obviamente me equivoqué…

Hace cualquiera sabe lo que está mal con mi aplicación ?

Gracias

OriginalEl autor Alexandre | 2011-11-09

4 Comentarios

  1. 10

    Si usted comienza con la identidad de transformar a cada momento, el resultado final que se ajuste a la subvista de transformación a sólo incluirá la escala y la rotación de la actual gesto. En lugar de comenzar con la identidad, comenzar con la transformación actual de la vista.

    CGAffineTransform transform = self.theSubViewToTransform.transform;
    transform = CGAffineTransformScale(transform, self.scaleWidth, self.scaleHeight);
    transform = CGAffineTransformRotate(transform, self.rotationAngle);
    self.theSubViewToTransform.transform = transform;

    La primera vez que se ejecuta, la transformación iniciará como la identidad de transformación. En posteriores ejecuciones, va a hacer que los nuevos cambios en la parte superior de las antiguas.

    Que es como yo lo hice, en primer lugar, empezar por el anterior transformar y agregar la marginal de transformar a cada momento, pero no ayuda tampoco. Si usted mira mi código, verá que puedo actualizar mi parámetros para cada uno de transformar con los cambios marginales para mis parámetros son absolutos en comparación con la visión global de inicialización y que debo hacer la transformación a partir de la identidad de transformación.
    Creo que la concatenación puede ser el problema. Los reconocedores de que está utilizando continua y se envíe más de una devolución de llamada. La escala y la rotación de los factores a partir de los gestos son desde el principio del gesto, no la cambio desde la última devolución de llamada. Usted no debe multiplicar por estos factores, cada vez que el gesto de los cambios. Es difícil decir más, aunque, sin ver más de su código.
    Ok, lo siento, es mi culpa. Olvidé mencionar en mi post inicial que puedo restablecer el reconocimiento del valor de cada una devolución de llamada.

    OriginalEl autor RPeck

  2. 3

    Para swift 3:

    view.transform = CGAffineTransform(rotationAngle:  CGFloat.pi).concatenating(CGAffineTransform(scaleX: 0.4, y: 0.4))

    OriginalEl autor UnRewa

  3. 2

    Trate de aplicar las transformaciones de la identidad de transformar, por ejemplo,

    CGAffineTransform transform = CGAffineTransformIdentity;
    transform = CGAffineTransformScale(transform, scaleWidth, scaleHeight);
    transform = CGAffineTransformRotate(transform, angle);
    viewToTransform.transform = transform;

    OriginalEl autor Ryan

  4. 2

    Usted debe comenzar a partir de su actual transformado estado y aplicar la transformación que se espera. También puedes echar un vistazo a CGAffineTransformConcat, hará una sola transformar antes de aplicar.

    CGAffineTransform transform = yourView.transform;
    transform = CGAffineTransformConcat(CGAffineTransformScale(transform,  self.scaleWidth, self.scaleHeight),
                                        CGAffineTransformRotate(transform, self.rotationAngle));
    yourView.transform = transform;

    Espero que ayude!

    OriginalEl autor NeverHopeless

Dejar respuesta

Please enter your comment!
Please enter your name here