¿Hay alguna manera de rotar el UIImage alrededor del punto externo usando CGAffineTranformMAkeRotation? tnx mucho!CGAffineTransformMakeRotation alrededor del punto externo
Respuesta
Aquí está una función que utiliza el mismo formato que el CGAffineTransform CoreGraphics Formato de API.
Esto funciona exactamente como deberían funcionar otras API "RotateAt()".
La operación representa el equivalente de la siguiente especificación: translate (pt.x, pt.y); girar (ángulo); traducir (-pt.x, -pt.y);
CGAffineTransform CGAffineTransformMakeRotationAt(CGFloat angle, CGPoint pt){
const CGFloat fx = pt.x, fy = pt.y, fcos = cos(angle), fsin = sin(angle);
return CGAffineTransformMake(fcos, fsin, -fsin, fcos, fx - fx * fcos + fy * fsin, fy - fx * fsin - fy * fcos);
}
Al igual que con CGAffineTransformMakeRotation()
, el ángulo en radianes, no grados.
Acabo de darle una oportunidad. Algo así como que debe dar el resultado que busca ...
- (void)rotateView:(UIView *)view aroundPoint:(CGPoint)point withAngle:(double)angle{
//save original view center
CGPoint originalCenter = view.center;
//set center of view to center of rotation
[view setCenter:point];
//apply a translation to bring the view back to its original point
view.transform = CGAffineTransformMakeTranslation(originalCenter.x, originalCenter.y);
//multiply the view's existing rotation matrix (the translation) by a rotation and apply it to the view
//thereby making it rotate around the external point
view.transform = CGAffineTransformConcat(view.transform, CGAffineTransformMakeRotation(angle));
}
Sólo para explicar mi razonamiento un poco ...
Lo que estamos haciendo básicamente está cambiando físicamente la vista hasta el punto de rotación, luego aplicar una traducción para que parezca que se quedó en el punto original. Entonces, si multiplicamos una rotación por la nueva traducción de la vista, rotamos esencialmente toda la vista y su sistema de coordenadas, por lo que parece que gira alrededor del punto dado. Espero haber explicado eso bien. : | Si no, sugiero buscar matrices de transformación en línea, tal vez puedas encontrar mejores explicaciones sobre cómo se acumulan allí.
Establezca el punto de ancla de la capa de la vista de imagen en algo fuera de (0,0) y (1,1), es decir, view.layer.anchorPoint = CGPointMake (2, 2).
Si va con esto, recuerde dos cosas: a) esto cambiará completamente donde se dibuja su vista, no solo la transformación b) los valores x e y de anchorPoint están en múltiplos del tamaño de la vista, creo. No están en el sistema de coordenadas de la vista principal. – mjisrawi
He resuelto de esta manera: Pongo el UIImage que quiero rotar en otra vista. La vista es más grande que la vista de la imagen, por lo que el punto central de la vista es el punto externo de la visualización, por lo que gire la vista ...
- 1. Trigonometría adecuada para girar un punto alrededor del origen
- 2. OpenGL girar alrededor de un punto
- 3. Gire un punto alrededor de un punto con OpenCV
- 4. UIImageView "aplastado" después de CGAffineTransformMakeRotation
- 5. Girar el rectángulo alrededor de un punto
- 6. ¿Cómo rotar el objeto alrededor de un punto usando cuaterniones?
- 7. Rotación de un objeto alrededor de un vector central punto
- 8. Coordenadas GPS: 1km cuadrados alrededor de un punto
- 9. cómo rotar alrededor de un punto especificado en fabric.js?
- 10. dibujando un círculo de radio R alrededor de un punto
- 11. three.js - ¿cómo giro un cilindro alrededor de un punto específico?
- 12. Girando alrededor de un punto arbitrario: HTML5 Canvas
- 13. ¿Cómo rotar un vértice alrededor de un cierto punto?
- 14. rotación en 3D alrededor del origen
- 15. Calcular Voronoi alrededor del polígono
- 16. leer archivo del almacenamiento externo
- 17. Arrastrar un formulario WPF alrededor del escritorio
- 18. Lienzo HTML: trazo punteado alrededor del círculo
- 19. href alrededor del tipo de entrada enviar
- 20. ¿Paréntesis alrededor del tipo de datos?
- 21. cuadro de CSS sombra alrededor del triángulo
- 22. Eclipse Android XML salta alrededor del editor
- 23. Android dibuja un círculo alrededor del texto
- 24. -webkit-transform traducir alrededor del centro
- 25. ¿Cómo rotar en CSS3 alrededor del origen?
- 26. Punto muerto del semáforo
- 27. Determinación del punto medio entre 2 coordenados
- 28. rotar cammera alrededor del centro del objeto wpf
- 29. Lectura de parámetros del archivo externo - C#
- 30. Proteger la función jQuery del acceso externo
Supongo que pt es un centro? – Andy
¿Por qué no puedes simplemente hacer una 'var t = CGAffineTransformMakeTranslation (-pt.x, -pt.y)' y luego hacer la rotación con 't = CGAffineTransformRotate (t, angel)' y luego traducir de nuevo con 'var t = CGAffineTransformTranslate (t, pt.x, pt.y) '? – Adam
@ Adam Eso son 3 cosas que tienes que hacer. Mi respuesta es una llamada para hacer las tres. Extremadamente optimizado. Por favor, vuelva a leer mi respuesta, especialmente la tercera línea antes del código. – Andy