2011-03-30 16 views
6

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

+0

La risposta dipende dal vostro uso di quel convertito CGRect. Cosa intendi fare con il rettangolo convertito? – Anurag

+0

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

+0

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

risposta

12

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 Hopefully this image makes it clearer

+0

+1 Grazie mille per la risposta è davvero buona ... – ajay

Problemi correlati