Se aggiungo qualsiasi tipo di UIDynamicBehavior
alle mie viste, si interrompe completamente quando il dispositivo viene ruotato. Ecco di cosa si tratta in verticale (visualizzati correttamente):UIDynamics e Device Rotation
E qui è nel paesaggio, tutto rotto:
Non credo che sia un problema layout automatico, perché se tolgo le chiamate per aggiungere UIDynamicBehavior
funziona correttamente senza problemi di caricamento automatico. Neanche gli errori di autolayout vengono mai lanciati. Ecco il codice:
@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];
}
Se sovrascrivo didRotateFromInterfaceOrientation
posso vedere che il confine superiore del greenView
non segue quello autolayout dice che dovrebbe (ancora una volta, eliminando la chiamata a setupCollisions
consente la correzione).
I confini layout automatico su greenView
sono:
height = 200
trailing space to Superview = 0
leading space to Superview = 0
bottom space to Superview = 0
Ciao, vedo che si sta utilizzando Collision Comportamento qui. Cosa fa questo senza Gravity Behaviour? Grazie. – Unheilig
In questo esempio, non sto nemmeno usando un Gravity Behavior. Se lo spengo, fa la stessa cosa. – swilliams
Consiglio vivamente di guardare i video del WWDC sull'argomento. Sessioni 206 e 221 di quest'anno. https://developer.apple.com/wwdc/videos/ Crea le tue domande su SO se ne hai. – swilliams