2011-12-18 14 views
6

Animo muchas vistas usando (..) [UIView commitAnimations]. Ahora quiero comprobar si la vista, que fue "filmada", ha tocado otra vista. ¿Alguien sabe cómo implementar esto? Tal vez if(view.frame.origin.x==anotherview.frame.origin.x){ } ..Objective-C: compruebe si la vista toca otra vista

Respuesta

20

Conceptualmente, una vista "toca" otra vista si sus rectas se cruzan. Así que para comparar las rectas de delimitación de dos puntos de vista, que quiere hacer algo como:

Boolean viewsOverlap = CGRectIntersectsRect(viewA.bounds, viewB.bounds); 

Pero eso por sí solo no va a funcionar porque las rectas de delimitación de las vistas se especifican en sus propios espacios de coordenadas (es decir, tanto al iniciar 0,0, etc, etc) Así también es necesario para transformar las rectas a un espacio de coordenadas común antes de compararlas:

CGRect boundsA = [viewA convertRect:viewA.bounds toView:nil]; 
CGRect boundsB = [viewB convertRect:viewB.bounds toView:nil]; 
Boolean viewsOverlap = CGRectIntersectsRect(boundsA, boundsB); 

a partir de ahí, usted debería ser capaz de averiguar la forma de repetición de manera eficiente a través de su lista de views-you-care-about para determinar si hay superposición.

+1

+1 bien explicado – Till

4

alternativamente, puede simplemente comparar los marcos de si están en el mismo supervista:

BOOL methodB = CGRectIntersectsRect(viewA.frame, viewB.frame); 
+0

Esto funciona perfectamente! – Bobby

Cuestiones relacionadas