3I tenemos una imagen que se presenta manipulados por el tacto.

Permite decir que es una imagen de una flecha que apunta hacia arriba. Después de que se haya girado 180 grados, de forma que la flecha apunta hacia abajo ahora, quiero restablecer CGAffineTransform propiedades por lo que se piensa ahora que se volvió a los 0 grados.

Quiero esto porque tengo que traducir, rotar, escalar, etc si la imagen del ángulo es de 0 O 180.

Gracias de antemano.

EDITADO Ater 5 respuestas:

Hmm, no estoy seguro de si alguna de estas respuestas, hacer lo que yo quería. Me disculpo por no ser claro.

  1. Una Imagen con la flecha apuntando hacia arriba se toca y se mueve a la derecha – todo está bien.
  2. Imagen se gira con el gesto de giro y volvió 180deg – todo está bien
  3. Imagen ahora está tocado y movido a la derecha, Ya que las coordenadas están al revés, ahora la imagen está saltando arriba y abajo haciendo mis otras secuencias de animación ir descompone.

Para evitar el problema anterior y algunos otros, quiero restablecer todo después de que se ha girado 180. Por ejemplo, una vez que la imagen se volvió 180deg, CGAffineTransform propiedades sabe que se ha convertido en un 180%. Quiero restablecer la poperties en ese momento así CGAffineTransform piensa torneadas, 0 grados en lugar de los 180, apesar de la imagen está al revés visualmente. Quiero que esto suceda sin cambios visuales, tan pronto como su girado a 180deg.

Espero que esto sea más claro….

InformationsquelleAutor Gizmodo | 2011-05-13

5 Comentarios

  1. 76

    Si usted está tratando de restablecer la transformación, de modo que la imagen aparezca como lo hizo originalmente, puedes configurar la transformación de nuevo a la identidad.

    self.imageView.transform = CGAffineTransformIdentity

    Si quieres aplicar arbitraria transformaciones de la imagen transformada, lo más fácil sería utilizar el CGAffineTransform métodos que toman en una transformación. Sólo tienes que enviar en la actual transformación. Por ejemplo:

    CGAffineTransform scale = CGAffineTransformMakeScale(zoom, 1);
    self.imageView.transform = CGAffineTransformConcat(self.imageView.transform, scale);

    Si usted REALMENTE necesita la imagen tal como aparece sin ningún tipo de transformación en todos, tendrás que dibujar de nuevo en otra imagen. Eso no es difícil, pero no lo recomiendo como primera solución. Este código funciona en el contexto de una UIView categoría por un arbitrario de la vista, incluyendo un UIImageView:

    - (UIImage *) capture {
        CGRect screenRect = self.frame;
        CGFloat scale = [[UIScreen mainScreen] scale];
        UIGraphicsBeginImageContextWithOptions(screenRect.size, YES, scale);
    
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        [[UIColor blackColor] set];
        CGContextFillRect(ctx, screenRect);
    
        [self.layer renderInContext: ctx];
    
        UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    
        UIGraphicsEndImageContext();
    
        return newImage;
    }
    • Creo que lo que él quiere es permanecer apuntando hacia abajo, pero tiene que ser la identidad de la transformación.
    • Marty consulte edición de un par de otras soluciones. 🙂
  2. 38

    Swift 3, Swift 4 y Swift 5

    Puede restablecer un CGAffineTransform con esto:

    self.imageView.transform = CGAffineTransform.identity

    La versión más corta es sólo .identity así:

    self.imageView.transform = .identity
  3. 5

    Hizo algo similar pero más simple la de ayer.

    Encontrar cualquier transformación existente de valor. A continuación, poner esto como un desplazamiento a la nueva transformación.

    Ver ejemplos:

    //Rotate right/clockwise
    
    CGFloat radians = atan2f(imageView.transform.b, imageView.transform.a);
    CGFloat degrees = radians * (180 / M_PI);
    //Yeah yeah, I like degrees.
    CGAffineTransform transform = CGAffineTransformMakeRotation((90 + degrees) * M_PI/180);
    imageView.transform = transform;

    //Rotate left/anticlockwise
    
    CGFloat radians = atan2f(imageView.transform.b, imageView.transform.a);
    CGFloat degrees = radians * (180 / M_PI);
    //Yeah yeah, I like degrees.
    CGAffineTransform transform = CGAffineTransformMakeRotation((-90 + degrees) * M_PI/180);
    imageView.transform = transform;

    Esto es sólo una sugerencia, si quieres vivir con la adición de hasta existente transformar los valores a las nuevas transformaciones para hacer el movimiento correcto. Utilice los mismos métodos para la escala, etc.

    Algunas sugerencias de uso de CABasicAnimation con aditivo de la propiedad se establece en SÍ. Pero no podía conseguir que funcione.

  4. 2

    Puede combinar múltiples transformaciones. Por ejemplo:

    CGAffineTransform rotation = CGAffineTransformMakeRotation(up ? 0 : M_PI);
    imageView.transform = CGAffineTransformScale(rotation,xScale, yScale);
    • Su comentario a Micah que la respuesta fue correcta. Pero esta respuesta didnot de abordar la cuestión del bien. Estoy frente a una similar necesidad en la actualidad. ¿Tienes alguna otra sugerencia?
    • Si usted está realmente en busca de una respuesta a esta pregunta, usted puede iniciar una recompensa por ello.
    • Que es una buena idea!

Dejar respuesta

Please enter your comment!
Please enter your name here