I have a CGRect
; posso trasferire le sue coordinate per essere nel sistema di coordinate utente, cioè, nell'angolo in basso a sinistra in alto invece che nell'angolo in alto a sinistra in basso. C'è qualche metodo predefinito per questo o ho bisogno di calcolarlo manualmente? Grazie in anticipo.Modifica del valore CGrect nel sistema di coordinate utente
risposta
Per convertire un rettangolo da un sistema di coordinate che ha la sua origine in basso a sinistra (chiamiamolo semplicemente sistema di coordinate tradizionale per dargli un nome) in un sistema in cui l'origine è in alto a sinistra (sistema di coordinate iPhone) è necessario conoscere la dimensione della vista in cui è CGRect
, poiché la vista è il riferimento per il rettangolo.
Ad esempio, supponiamo di avere una visualizzazione con dimensioni 200 x 300 e il numero CGRect
di cui disponi è CGRectMake(10, 20, 30, 40)
. Le dimensioni di CGRect
rimarranno le stesse. Tutto ciò che cambierà è l'origine - in realtà, solo la coordinata y cambierà e non la coordinata x, perché i sistemi di coordinate tradizionali e iPhone iniziano entrambi sul lato sinistro (uno in basso a sinistra, l'altro in alto a sinistra).
Quindi avremo qualcosa come CGRectMake(10, y, 30, 40)
.
- (CGRect)rectangle:(CGRect)oldRect fromTraditionalToiPhoneCoordinatesWithReferenceViewOfSize:(CGSize)aSize
{
CGFloat oldY = oldRect.origin.y; // This is the old y measured from the bottom left.
CGFloat newY = aSize.height - oldY - oldRect.size.height;
CGRect newRect = oldRect;
newRect.origin.y = newY;
return newRect;
}
Il nuovo rettangolo, come misurato da un iPhone (in alto a sinistra) sistema di coordinate, sarebbe: CGRectMake(10, 300 - 20 - 40, 30, 40) = CGRectMake(10, 240, 30, 40)
.
Speriamo che questa immagine lo rende più chiara
+1 Grazie mille per la risposta è davvero buona ... – ajay
La risposta dipende dal vostro uso di quel convertito CGRect. Cosa intendi fare con il rettangolo convertito? – Anurag
Ho un valore di rettangolo di linea nel sistema di coordinate di default (utente) ora voglio le coordinate nel sistema di coordinate di utilizzo di iPhone. – ajay
Quindi hai un rettangolo in un sistema di coordinate in cui l'origine è in basso a sinistra e vuoi convertirlo nel sistema di coordinate iOS? Puoi pubblicare un esempio di un rettangolo che hai nel sistema di coordinate predefinito? – Anurag