Развернуть конфликтующие UIViews

Я столкнулся со сложным алгоритмом...

Я разрабатываю приложение для iOS, в котором у меня есть карта радиуса, где посередине находится изображение моего профиля, а вокруг изображения профиля есть изображения других профилей других пользователей. Дело в том, что некоторые из этих профилей пересекаются и я хотел бы их расширить.

Моя цель - получить от меня ближайший профиль и проверить, не перекрывает ли его какой-либо другой профиль. Если это так, возьмите этот профиль и отодвиньте его от другого профиля.

Профили перекрываются

Профиль перемещен из ближайшего профиля в центр

Может кто-нибудь, пожалуйста, помогите мне...

Спасибо!


person Albert Montserrat    schedule 23.05.2016    source источник


Ответы (1)


Я, наконец, решил с помощью этого кода:

    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;
    }

Где 36.0 — ширина точки, а DistanceFromView:toView: — это:

    -(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));
    }

Надеюсь, это поможет кому-то.

person Albert Montserrat    schedule 23.05.2016