Qual è il modo migliore per normalizzare i valori CGRect
in modo che siano compresi tra 0 e 1 (sistema di coordinate dell'unità)?Normalizzazione CGRect tra 0 e 1
risposta
Un modo molto conciso di fare questo sarebbe:
CGAffineTransform t = CGAffineTransformMakeScale(1.0/parentRect.size.width, 1.0/parentRect.size.height);
CGRect unitRect = CGRectApplyAffineTransform(rect, t);
Questa risposta sembra funzionare molto bene il problema. – ORStudios
Questo dovrebbe fare il trucco. Hai solo bisogno di dividere tutto per la larghezza/altezza della vista genitore o del livello.
CGFloat parentWidth = parentView.bounds.size.width;
CGFloat parentHeight = parentView.bounds.size.height;
CGRect rectToConvert = ...;
rectToConvert.origin.x /= parentWidth;
rectToConvert.origin.y /= parentHeight;
rectToConvert.size.width /= parentWidth;
rectToConvert.size.height /= parentHeight;
Diciamo questi tipi di rettangoli e punti si trovano nella "unità di sistema di coordinate". Puoi leggere ulteriori informazioni a riguardo nello Core Animation Programming Guide.
Perché stai dividendo le coordinate di origine per la dimensione? –
@SeamusCampbell Forse perché è necessario? –
Così facendo restituirai un 'CGFloat' tra 0 e 1 - che è quello che l'utente ha chiesto .. – rog
ne dite di questo:
CGRect rectToConvert;
NSAffineTransform *n = [NSAffineTransform transform];
[n scaleXBy:rectToConvert.size.width
yBy:rectToConvert.size.height];
[n invert];
CGRect normalizedRect;
normalizedRect.origin = [n transformPoint:rectToConvert.origin];
normalizedRect.size = [n transformSize: rectToConvert.size];
CGPoint anyPointINeedToConvert;
CGPoint convertedPoint = [n transformPoint:anyPointINeedToConvert];
I pensa questo lo rende un po 'più chiaro quello che sta succedendo e ti permette di prendersi cura di traduzioni in modo evidente, se si ha a che fare di loro.
- 1. Normalizzazione da [0.5 - 1] a [0 - 1]
- 2. Differenza tra CGSize e CGRect
- 3. È! 0 e! 1 meglio di 1 e 0?
- 4. Come generare un doppio crittograficamente sicuro tra 0 e 1?
- 5. Qual è la differenza tra srand (1) e srand (0)
- 6. Differenza tra setTimeout (fn, 0) e setTimeout (fn, 1)?
- 7. Genera numeri casuali tra 0 e 1 con distribuzioni gaussiane
- 8. Differenza tra exit (0) e exit (1) in Python
- 9. Qual è la differenza tra [0] e [: 1] in Go?
- 10. distinguere tra 0 e ""
- 11. Differenza tra array.GetLength (0) e array.GetUpperBound (0)
- 12. Perché 0 && 1 è 1 mentre 1 && 0 è 0 in ruby?
- 13. Che differenza c'è tra la lista [-1:] [0] e la lista [len (lista) -1]?
- 14. Utilizzo di request.getRemoteAddr() restituisce 0: 0: 0: 0: 0: 0: 0: 1
- 15. scelta tra $ 0 e BASH_SOURCE
- 16. Perché il risultato 2 + 1 e 0 è 0?
- 17. bug g ++? (Bool_val 0: 1) restituisce né 0 né 1
- 18. Convertire 0 a 1 e viceversa
- 19. Haskell di lista 0 e 1.
- 20. Come ottenere casuale 0 e 1 numeri
- 21. Dipendenza funzionale e normalizzazione
- 22. Perché 0 === -0 è vero, ma 1/0 === 1/-0 è falso?
- 23. 0-1 algoritmo Knapsack
- 24. Perché ~ 0 è -1?
- 25. Determinare il tempo tra 1 a 0 transizioni
- 26. Indicizzazione stringa - Perché S [0] [0] funziona e S [1] [1] fallisce?
- 27. Scambio 1 con 0 e 0 con 1 in modo Pythonic
- 28. In C# tra> 0 e> = 1 che è più veloce e migliore?
- 29. Differenza tra inverso e [:: - 1]
- 30. HTTP scade i valori di intestazione "0" e "-1"
@CodaFi Questo è niente a che fare con CGRectIntegral. Si tratta di convertire in un sistema di coordinate "unità" per lavorare con vari metodi CALayer. –
Per qualsiasi recensore o mod, entrambi i voti ravvicinati sono totalmente non validi. –
Lo sono. Non ho letto abbastanza la domanda. Non sono sicuro degli altri, però. – CodaFi