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
を使用する必要がありますが、私はそれを使用する方法を見つけ出すことはできません。 誰かが提案をしていますか?
ありがとうございます! 残念ながら、UICollectionViewを使用することはできません。ビューは、基本的にSVGファイルであるフロアのマップからSVGKitライブラリを使用してロードされます。私はフィルタから選択されたマップの部屋をズームする必要があります。 – lorenzoliveto
あなたのCGRectIntersectsRectの使用は私にとって大丈夫です。何が問題なのかよく分からないIm、幸運:( –