2016-05-23 6 views
0

私は、コンテナビューのサブビューの配列を持っています。
ユーザがフィルタを選択すると、選択したビューを拡大(フィルタに合わせる)し、そのサイズを1.1倍に拡大し、中心を維持しながら重なりを防止したいと考えています。ここ
は、これまでの私のコードです:問題は- (void) preventOverlapOfView1: (UIView *) v1 View2: (UIView *) v2であるビューの重複を防止する

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

、私はCGRectIntersectionを使用する必要がありますが、私はそれを使用する方法を見つけ出すことはできません。 誰かが提案をしていますか?

答えて

0

少し左の提案として、なぜUICollectionViewを使用しないのですか?あなたが提案しているアプリケーションの種類に対して正確に設計されています。特定のセルをズームインすると、自動的に他のセルが移動し、サイズの変更に対応します。

もしそうでなければ、私はこれにautolayoutを使うことをお勧めします。もう一度重複しないように他のビューを助けるでしょう。しかし、コレクションビューが最適なオプションになります。

+0

ありがとうございます! 残念ながら、UICollectionViewを使用することはできません。ビューは、基本的にSVGファイルであるフロアのマップからSVGKitライブラリを使用してロードされます。私はフィルタから選択されたマップの部屋をズームする必要があります。 – lorenzoliveto

+0

あなたのCGRectIntersectsRectの使用は私にとって大丈夫です。何が問題なのかよく分からないIm、幸運:( –

関連する問題