2016-05-23 1 views
0

Je suis face à un algorithme dur ...Développer entrer en collision UIViews

Je développe une application iOS où j'ai une carte de rayon, où au milieu il y a l'image de mon profil et arround l'image de profil il y a d'autres profils des images d'autres utilisateurs. Le fait est que certains de ces profils se chevauchent et j'aimerais les développer.

Mon but est d'obtenir le profil le plus proche de moi et de vérifier s'il y a un autre profil qui le chevauche. Si c'est le cas, prenez ce profil et éloignez-le de l'autre profil.

The profiles overlaping

The profile moved from the nearest profile to the center

Quelqu'un peut-il s'il vous plaît aidez-moi ...

Merci!

Répondre

0

J'ai finalement résolu avec ce code:

int tries = 0; 
    while(true){ 
     BOOL f = NO; 
     for(Dot *dot1 in dots){ 

      for(Dot *dot2 in dots){ 

       if(dot1 == dot2) 
        continue; 

       CGFloat distance = fabs([self distanceFromView:dot1 toView:dot2]); 

       if(distance < 36.0){ 

        f = YES; 

        CGFloat bearing = atan2((dot2.suggestedCenter.y - dot1.suggestedCenter.y) , (dot2.suggestedCenter.x - dot1.suggestedCenter.x)); 

        CGPoint vector = CGPointMake(36.0 * cosf(bearing), 36.0 * sinf(bearing)); 

        CGPoint newPoint = CGPointMake(dot1.suggestedCenter.x + vector.x, dot1.suggestedCenter.y + vector.y); 
        dot2.suggestedCenter = newPoint; 

       } 

      } 

     } 
     if(!f) 
      break; 
     tries ++; 
     if(tries > 100) 
      break; 
    } 

Où 36,0 est la largeur du point et distanceFromView: toView: est:

-(double)distanceFromView:(Dot *)from toView:(Dot *)to{ 
     return sqrt(pow(to.suggestedCenter.x - from.suggestedCenter.x, 2) + pow(to.suggestedCenter.y - from.suggestedCenter.y, 2)); 
    } 

espoir qui aide quelqu'un.