Ho usato questo ottimo tutorial al calcio di inizio di un piccolo progetto a cui sto lavorando sulla fisica che coinvolgono:Applicando Box2D fisica per UIView vs. CALayer
http://www.cocoanetics.com/2010/05/physics-101-uikit-app-with-box2d-for-gravity/
Fondamentalmente, si crea un mondo e vale la fisica di B2D a qualsiasi vista tu abbia. Molto semplice e funziona. Tuttavia, ho provato ad applicare la stessa logica usando CALayers, cioè creo a livello di codice dei livelli, li aggiungo al view.play principale e proviamo ad animarli.
Codice di esempio per la creazione dello strato:
CALayer *layer = [CALayer layer];
layer.backgroundColor = [UIColor blackColor].CGColor;
layer.frame = CGRectMake(50, 100, 30, 30);
layer.name = @"square";
[self.view.layer addSublayer:layer];
E la fisica applicata nel ticker:
CALayer *oneLayer = (CALayer *)b->GetUserData();
// y Position subtracted because of flipped coordinate system
CGPoint newCenter = CGPointMake(b->GetPosition().x * PTM_RATIO, self.view.bounds.size.height - b->GetPosition().y * PTM_RATIO);
oneLayer.position = newCenter;
CGAffineTransform transform = CGAffineTransformMakeRotation(- b->GetAngle());
oneLayer.affineTransform = transform;
Si noti che ho adattato la trasformazione affine chiamata alla classe CALayer.
Ho controllato e ricontrollato le variabili, ei numeri sembrano corrispondere. Quello che ottengo è un rimbalzo strano dall'animazione CALayer e un'animazione perfetta da UIView. Qualcuno ha esperienza in Box2D e UIKit per rispondere perché questo può accadere?
Può spiegare "rimbalzo strano" – erkanyildiz
questo: http://youtu.be/OpTXuqIgiPE - nero è CALayer, Green è UIView.The CALayer rimbalza prima di colpire il "terreno". Una ragione mi porta a pensare che le dimensioni et al. sono corretti è dovuto al fatto che il CALAYer alla fine smette di rimbalzare con il fondo del telaio che tocca il suolo. – hcabral