UICollision Behavior의 임의적인 치수 변경 문제

여기에 소개된 문제는 버그가 아니라 UICollision Behavior의 방법입니다.
https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UICollisionBehavior_Class/index.html
IMPORTANT

When setting the initial position for a dynamic item, you must ensure that its bounds do not intersect any collision boundaries. The animation behavior for such a misplaced item is undefined.
어쨌든 초기 설정을 고려하지 않고 반복하면 이상할 것이다.
그러니까

재현 코드


ViewController.m
@interface ViewController (){
    UIDynamicAnimator *animator;
    UICollisionBehavior *collisionBehavior;
    NSMutableArray*vs;
}
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    vs = [NSMutableArray array];
    animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
    collisionBehavior = [UICollisionBehavior new];
    collisionBehavior.translatesReferenceBoundsIntoBoundary  = true;
    [animator addBehavior:collisionBehavior];

    UITapGestureRecognizer*t = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap)];
    [self.view addGestureRecognizer:t];
}

- (void)tap{
    UIView*v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    v.backgroundColor = [UIColor redColor];
    [self.view addSubview:v];
    [vs addObject:v];
    for (id o in collisionBehavior.items) {
        [collisionBehavior removeItem:o];
    }
    int index = 0;
    for (UIView*view in vs) {
        view.frame = CGRectMake(0,100*index, 100,100);
        [collisionBehavior addItem:view];
        if (view.bounds.size.height!=view.bounds.size.width) {
            view.backgroundColor = [UIColor blueColor];
            NSLog(@"size w=%f : h=%f",view.bounds.size.width,view.bounds.size.height);
        }
        index++;
    }
}

@end

클릭할 때마다 100*100의 사각형을 화면 왼쪽에 배열하는 코드입니다.
단, t r a n s l a t e s R e ference Bounds Into Boundary 설정으로 화면을 넘어선 후 초기 위치가 화면 오른쪽 아래 시야와 겹치는 상태에서는 콜린시비아에 등록된다.
위의 코드는 종횡 100*100이 붕괴된 후 파란색으로 변한다고 쓰여 있습니다.





재현했어.
프레임 사이즈는 안 탔지만 시야 사이즈가 달라진 걸 확인할 수 있을 것 같아요.
신축성 있는 디자인이므로 지저분한 UI를 만들 때는 주의해야 한다.

좋은 웹페이지 즐겨찾기