0

フレームを手動で設定するプログラムで追加された、コンテナー ビューのサブビューの配列があります。
ユーザーがフィルターを選択すると、選択したビュー (フィルターに一致) をズームして、サイズを 1.1 増やし、中心を維持しながらオーバーラップを防ぎたいと思います。
これまでの私のコードは次のとおりです。

- (void) positionSubviewsWithoutOverlapping: (NSArray *) views {
    for (UIView *v in views){
        CGPoint center = v.center;
        v.frame = CGRectMake(v.frame.origin.x, v.frame.origin.y, v.frame.size.width*1.1, v.frame.size.height*1.1);
        v.center = center;
    }
    while ([self repositionSubviews:views]) {
    }
}

- (BOOL) repositionSubviews: (NSArray *) views{
    BOOL somethingChanged = FALSE;
    for (UIView *v1 in views){
        for (UIView *v2 in views){
            if (v1 != v2){
                if (CGRectIntersectsRect(v1.frame, v2.frame)){
                    somethingChanged = TRUE;
                    [self preventOverlapOfView1:v1 View2:v2];
                }
            }
        }
    }
    return somethingChanged;
}

- (void) preventOverlapOfView1: (UIView *) v1 View2: (UIView *) v2  {
    if (CGRectGetMaxX(v1.frame) > CGRectGetMinX(v2.frame)){
        CGFloat diff = CGRectGetMaxX(v1.frame)-CGRectGetMinX(v2.frame);
        v1.frame = CGRectMake(v1.frame.origin.x-diff, v1.frame.origin.y, v1.frame.size.width, v1.frame.size.height);
    }
    else if (CGRectGetMinX(v1.frame) < CGRectGetMaxX(v2.frame)){
        CGFloat diff = CGRectGetMaxX(v2.frame)-CGRectGetMinX(v1.frame);
        v2.frame = CGRectMake(v2.frame.origin.x-diff, v2.frame.origin.y, v2.frame.size.width, v2.frame.size.height);
    }
    if (CGRectGetMaxY(v1.frame) > CGRectGetMinY(v2.frame)){
        CGFloat diff = CGRectGetMaxY(v1.frame)-CGRectGetMinY(v2.frame);
        v2.frame = CGRectMake(v2.frame.origin.x, v2.frame.origin.y-diff, v2.frame.size.width, v2.frame.size.height);
    }
    else if (CGRectGetMinY(v1.frame) < CGRectGetMaxY(v2.frame)){
        CGFloat diff = CGRectGetMaxY(v2.frame)-CGRectGetMinY(v1.frame);
        v1.frame = CGRectMake(v1.frame.origin.x, v1.frame.origin.y-diff, v1.frame.size.width, v1.frame.size.height);
    }
}

問題は にあります。使用- (void) preventOverlapOfView1: (UIView *) v1 View2: (UIView *) v2する必要がありますCGRectIntersectionが、使用方法がわかりません。誰か提案がありますか?

4

1 に答える 1