2010-08-01 8 views
9

He estado usando ese tipo de métodos de forma intermitente pero nunca entendí realmente cómo se comportaban.¿Cómo funciona? (CGRect) convertRect: (CGRect) rect toView: (UIView *) ver el trabajo

Cada vez que trato de usarlos, me encuentro hurgando en la oscuridad cuando intento diferentes aspectos y nunca parece hacer lo que espero.

Por el bien del argumento, estoy tratando de convertir el marco que obtengo de la notificación de UIKeyboard.

En el modo horizontal, consigo este NSRect:

UIKeyboardFrameEndUserInfoKey = NSRect: {{406, 0}, {362, 1024}} 

Ahora quiero convertirlo en el rect adecuada (permuta x/y, ancho y alto) por lo que

CGRect compatibleRect = [self convertRect:[[[notif userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue] toView:nil]; 

pero el rect se convierte en:

compatibleRect = CGRect: {{406,406}, {362, 1024}} 

Cualquier ayuda se agradece :)

Respuesta

13

Lo está utilizando mal. Básicamente hace una conversión de coordenadas. Supongo que comienza convirtiendo el rect desde la vista inicial a las coordenadas de la ventana y luego convirtiendo nuevamente las coordenadas de la ventana al sistema de coordenadas de la segunda vista. Aquí hay un ejemplo.

Tiene dos subvistas en su ventana, una con un marco de {{25,0}, {100, 100}}, la otra con un marco de {{50, 50}, {200, 200}} Desea traducir el siguiente rect {{50, 50}, {50, 50}} de la primera subvista a la segunda subvista. Así es como podría funcionar.

  1. convertir el rect desde el primer subvista del coordinada a la ventana de coordenadas: Desde la subvista estamos partiendo de un origen de cuenta {25,0} tenemos que traducirlo a las coordenadas de la ventana. Esto se puede hacer al agregar el origen de la subvista al origen del rect, por lo que el nuevo rect en las coordenadas de ventana es {{75, 50}, {50, 50}}

  2. convertir el nuevo rect de la ventana coordenadas a las coordenadas de la segunda subvista: Comenzamos con el rect {{75, 50}, {50, 50}}, el marco de la segunda subvista es {{50, 50}, {200, 200}}. Ahora restamos el origen de la segunda subvista al rect para hacer nuestra traducción. Así que terminamos con un rect traducido de {{25, 0}, {50, 50}}

+2

Entiendo cómo funcionan las conversiones. Sin embargo, estoy tratando de entender cómo funcionan esos métodos específicos. Utilicé [self.window convertRect: [[[notif userInfo] objectForKey: UIKeyboardFrameEndUserInfoKey] CGRectValue] fromWindow: nil]; para hacer que funcione Si consulta el siguiente enlace http://developer.apple.com/iphone/library/documentation/uikit/reference/UIWindow_Class/UIWindowClassReference/UIWindowClassReference.html#//apple_ref/occ/instm/UIWindow/convertRect:fromWindow : Menciona cómo se comporta, pero no está muy claro lo que realmente está sucediendo –

+4

En su caso, usted quiere usar convertRect: fromView: not convertRect: toView: así [auto convertRect: rect fromView: nil] tomará los límites , eso es en coordenadas de pantalla y convertirlo a sus coordenadas de vista local. – Elfred

Cuestiones relacionadas