UICollision Behavior의 임의적인 치수 변경 문제
8539 단어 UICollisionBehavioriOS
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를 만들 때는 주의해야 한다.
Reference
이 문제에 관하여(UICollision Behavior의 임의적인 치수 변경 문제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/noppefoxwolf/items/037a26558dad4ed28601텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)