awesome ios cocoa-touch uiview geometry

awesome - uikit ios



Comprender convertPoint: toView: (1)

Cada UIView tiene su propio sistema de coordenadas. Entonces, si tiene un UIView_1 que contiene otro UIView_2, ambos tienen un punto (10,10) dentro de ellos.

convertPoint: toView: permite al desarrollador tomar un punto en una vista y convertir el punto a otro sistema de coordenadas de vista.

Ejemplo: view1 contiene view2. La esquina superior izquierda de view2 se encuentra en view1 point (10,10), o mejor dicho view2.frame.orgin = {10,10}. Ese {10,10} se basa en el sistema de coordenadas view1. Hasta aquí todo bien.

El usuario toca la vista2 en el punto {20,20} dentro de la vista2. Ahora esas coordenadas están en el sistema de coordenadas view2. Ahora puede usar covertPoint: toView: para convertir {20,20} en el sistema de coordenadas de view1. touchPoint = {20,20}

CGPoint pointInView1Coords = [view2 convertPoint:touchPoint toView:view1];

Entonces, pointInView1Coords debería ser {30,30} en los sistemas de coordenadas view1. Ahora, eso fue solo matemática simple en este ejemplo, pero hay todo tipo de cosas que contribuyen a la conversión. Las transformaciones y escalas vienen a la mente.

Lea sobre el marco, los límites y el centro de UIView. Todos están relacionados y se ocupan de los sistemas de coordenadas para una vista. Es confuso hasta que empiezas a hacer cosas con ellos. Recuerde que este marco y centro están en el sistema de coordenadas del padre. Bounds está en el sistema de coordenadas de la vista.

John

No entiendo muy bien el método convertPoint:toView:

En la documentación de Apple está escrito que

convertPoint:toView:

Convierte un punto del sistema de coordenadas del receptor al de la vista especificada.

- (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view

Pero, ¿qué significa convertir un punto de uno a otro en realidad?

¿Implica que los puntos en ambos límites tienen unidades diferentes ? ¿O solo valores diferentes?

Si es el último, ¿por qué hay un método así cuando simplemente podemos asignar el valor del contenido de un contentOffset a b?

CGPoint a = [a contentOffset]; [b setContentOffset:a];

¿Cómo es convertPoint:toView: diferente de la simple asignación de contentOffset ? ¿O no entendí todo el concepto? ¿Qué significan los puntos de conversión ? ¿Cuándo se debe usar este método?