rotate iphone rotation reset cgaffinetransform

iphone - rotate - CGAffineTransform Restablecer



rotate view swift (4)

Puede combinar múltiples transformaciones. Por ejemplo:

CGAffineTransform rotation = CGAffineTransformMakeRotation(up ? 0 : M_PI); imageView.transform = CGAffineTransformScale(rotation,xScale, yScale);

3 Tengo una imagen que se manipula mediante el tacto.

Digamos que es una imagen de una flecha que apunta hacia arriba. Después de que se ha girado 180 grados, por lo que la flecha apunta hacia abajo ahora, quiero restablecer las propiedades de CGAffineTransform para que ahora piense que se volvió a 0 grados.

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

Gracias por adelantado.

EDITADO A partir de 5 respuestas:

Hmm, no estoy seguro de si alguna de estas respuestas hace lo que 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. La imagen se gira con el gesto de rotación y se gira 180 grados - todo está bien
  3. Ahora la imagen se toca y se mueve a la derecha. Dado que las coordenadas están al revés, ahora la imagen está saltando hacia arriba y hacia abajo, lo que hace que mis otras secuencias de animación se vuelvan complicadas.

Para evitar el problema anterior y algunos otros, quiero restablecer todo después de que se haya rotado 180. Por ejemplo, una vez que la imagen giró 180 grados, las propiedades de CGAffineTransform saben que ha girado 180%. Quiero restablecer los poperties en ese momento, por lo que CGAffineTransform cree que ha cambiado 0 grados en lugar de 180, aunque la imagen esté al revés visualmente. Quiero que esto suceda sin ningún cambio visual, tan pronto como se gire a 180 grados.

Espero que esto esté más claro ...


Si está intentando restablecer la transformación, para que la imagen aparezca como lo hizo originalmente, simplemente puede establecer la transformación de nuevo a la identidad.

self.imageView.transform = CGAffineTransformIdentity

Si desea aplicar transformaciones arbitrarias a la imagen transformada, lo más fácil sería utilizar los métodos CGAffineTransform que toman en cuenta una transformación existente. Solo envíe la transformación existente. Por ejemplo:

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

Si REALMENTE necesita la imagen tal como aparece sin ninguna transformación, tendrá que volver a dibujarla en otra imagen. Tampoco es tan difícil, pero no lo recomiendo como su primera solución. Este código funciona en el contexto de una categoría UIView para una vista arbitraria, que incluye 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; }


Hizo algo similar pero más simple ayer.

Encuentra cualquier valor de transformación existente. Luego, pon eso 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 solo una sugerencia si desea vivir agregando valores de transformación existentes a nuevas transformaciones para compensar el movimiento correcto. Use los mismos métodos para escalar, etc.

Algunos sugirieron usar CABasicAnimation con la propiedad de aditivo establecida en SÍ. Pero no pude hacer que eso funcione.


Swift 3 y Swift 4

Puede restablecer un CGAffineTransform con esto:

self.imageView.transform = CGAffineTransform.identity