Jeśli dodam do moich widoków dowolny rodzaj UIDynamicBehavior
, całkowicie zepsuje to, gdy urządzenie zostanie obrócone. Oto co jest w układzie pionowym (wyświetlanie poprawnie):UIDynamik i obrót urządzenia
I oto jest w krajobrazie, wszystko przerwał:
nie wierzę, że jest to kwestia autolayout bo jeśli usunąć połączenia aby dodać UIDynamicBehavior
działa dobrze bez problemów z autolayout. Nie są również zgłaszane żadne błędy autouzupełniania. Oto kod:
@interface SWViewController() {
UICollisionBehavior *coll;
UIDynamicAnimator *dynamicAnimator;
}
@implementation SWViewController
- (void)viewDidLoad {
[super viewDidLoad];
dynamicAnimator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self setupCollisions]; // commenting this out fixes the layout
}
- (void)setupCollisions {
NSArray *dynamicViews = @[greenView];
coll = [[UICollisionBehavior alloc] initWithItems:dynamicViews];
CGFloat topBound = CGRectGetMinY(greenView.frame);
[coll addBoundaryWithIdentifier:@"top"
fromPoint:CGPointMake(0, h1)
toPoint:CGPointMake(CGRectGetWidth(greenView.frame), h1)];
[dynamicAnimator addBehavior:coll];
}
Gdybym przesłonić didRotateFromInterfaceOrientation
widzę, że górna granica greenView
nie wynika co autolayout mówi, że powinien (ponownie, usuwając wezwanie do setupCollisions
poprawek tego).
Granice autoLayout na greenView
są:
height = 200
trailing space to Superview = 0
leading space to Superview = 0
bottom space to Superview = 0
Cześć, widzę, że używasz Collision Zachowanie tutaj. Co to oznacza bez zachowania grawitacji? Dzięki. – Unheilig
W tym przykładzie nie używam nawet zachowania grawitacyjnego. Jeśli go wyłączysz, robi to samo. – swilliams
Gorąco polecam oglądanie filmów WWDC na ten temat. Sesje 206 i 221 z tego roku. https://developer.apple.com/wwdc/videos/ Stwórz własne pytania na temat SO, jeśli je masz. – swilliams