Voglio ruotare un CGPoint sullo schermo a seconda dell'angolo e la rotazione è ancorata su un altro punto. Stavo chiedendo qual è il modo più efficace per farlo?Qual è il modo migliore per ruotare un CGPoint su una griglia?
risposta
È inoltre possibile utilizzare che:
rotatedPoint = CGPointApplyAffineTransform(initialPoint, CGAffineTransformMakeRotation(angle));
EDIT: per effettuare la rotazione attorno al punto personalizzato che si deve fare come Adamo ha descritto nella sua risposta. Utilizzando CGAffineTransform deve essere simile:
CGAffineTransform translateTransform = CGAffineTransformMakeTranslation(customCenter.x, customCenter.y);
CGAffineTransform rotationTransform = CGAffineTransformMakeRotation(angle);
CGAffineTransform customRotation = CGAffineTransformConcat(CGAffineTransformConcat(CGAffineTransformInvert(translateTransform), rotationTransform), translateTransform);
rotatedPoint = CGPointApplyAffineTransform(initialPoint, customRotation);
questo gestisce la rotazione su un altro punto a parte su se stesso? – Frank
ha appena apportato alcune modifiche a tale codice, CGAffineTransformMakeTransation è CGAffineTransformMakeTranslation, errore di battitura minore. e per l'angolo, deve essere radiante ma a parte questo funziona! – Frank
Utilizzare un 2D rotation matrix. Se si desidera ruotare in senso antiorario un punto circa l'origine di un angolo di angle
, allora si dovrebbe fare questo:
CGPoint RotatePointAboutOrigin(CGPoint point, float angle)
{
float s = sinf(angle);
float c = cosf(angle);
return CGPointMake(c * point.x - s * point.y, s * point.x + c * point.y);
}
Se si desidera ruotare attorno ad un punto diverso da quello di origine, si dovrà prima sottrarre il centro di rotazione dal tuo punto, ruotalo usando il precedente, e quindi aggiungi di nuovo nel centro di rotazione (questo è chiamato coniugazione nella teoria delle matrici).
Adam, mi hai salvato la vita con la spiegazione della coniugazione. Grazie :) –
Utilizzare uno CGAffineTransform.
Si può anche lasciare Core Animation farlo per voi. Date un'occhiata a documenti di Apple sulla geometria strato e trasforma nel Core Animation Programming Guide
Tutto quello che dovete fare è impostare l'AnchorPoint dello strato e quindi è possibile applicare la trasformazione con qualcosa di simile:
CABasicAnimation *rotationAnimation;
rotationAnimation = [CABasicAnimation
animationWithKeyPath:@"transform.rotation.z"];
[rotationAnimation setFromValue:DegreesToNumber(0)];
[rotationAnimation setToValue:DegreesToNumber(360)];
DegreesToNumber converte gradi in radianti e restituisce una rappresentazione NSNumber.
Non sono sicuro di cosa si stia tentando di fare esattamente, ma spesso l'Animazione di base è un'ottima scelta per le visualizzazioni.
Usando Vladimir’s answer, qui di seguito è il Swift 3 risposta:
let initialPoint = CGPoint(x: 100, y: 100) // the point you want to rotate
let translateTransform = CGAffineTransform(translationX: initialPoint.x, y: initialPoint.y)
let rotationTransform = CGAffineTransform(rotationAngle: angle)
let customRotation = (rotationTransform.concatenating(translateTransform.inverted())).concatenating(translateTransform)
rotatedPoint = initialPoint.applying(customRotation)
- 1. Qual è il modo migliore per ruotare i registri per l'applicazione rails
- 2. CSS: qual è il modo migliore per creare una griglia Sudoku 9x9?
- 3. Il modo migliore per creare una griglia 10x10 di UIButtons?
- 4. Qual è il modo migliore per visualizzare ASCII in una griglia con pannelli usando Java?
- 5. Qual è il modo migliore per svuotare una directory?
- 6. Qual è il modo migliore per reimparare una lingua?
- 7. Qual è il modo migliore per creare una ricerca whois?
- 8. Qual è il modo migliore per impaginare una classe C#?
- 9. Qual è il modo migliore per autorizzare una chiavetta USB
- 10. Qual è il modo migliore per dichiarare una variabile globale?
- 11. Qual è il modo migliore per testare una RedirectToAction?
- 12. Qual è il modo migliore per generare una sitemap?
- 13. Qual è il modo migliore per chiudere un ramo Mercurial?
- 14. Qual è un modo migliore per verificare se una stringa è un numero intero su iPhone?
- 15. Qual è il modo migliore per costruire un NSCompoundPredicate complesso?
- 16. Qual è il modo migliore per inviare un oggetto su una rete in Python?
- 17. qual è il modo migliore per ottenere una sub HashMap basata su un elenco di chiavi?
- 18. qual è il modo migliore per applicare una maschera ad un EditText su Android?
- 19. Qual è il modo migliore per salvare una pagina Web completa su un server Linux?
- 20. Qual è il modo migliore per ridimensionare un oggetto BitmapData?
- 21. Il modo migliore per ruotare un'immagine usando SDL?
- 22. Qual è il modo migliore per testare un'app per rails?
- 23. Qual è il modo migliore per documentare il codice f #?
- 24. Qual è il modo migliore per imparare CUDA?
- 25. Qual è il modo migliore per attivare le stampe Python?
- 26. Qual è il modo migliore per rilevare il colore bianco?
- 27. Qual è il modo migliore per esportare enormi cataloghi Magento
- 28. Qual è il modo migliore per imparare Django 1.5?
- 29. Qual è il modo migliore per impostare MACOSX_DEPLOYMENT_TARGET?
- 30. Qual è il modo migliore per produrre una tilde in LaTeX per un sito Web?
Vuoi dire che si desidera ruotare qualcosa attorno a un punto? – Jasarien
Sì, ovviamente, da un punto di origine. – Frank