He utilizado este excelente tutorial del inicio del partido un pequeño proyecto que estoy trabajando en la física que implican:La aplicación de la física Box2D a UIView vs CALayer
http://www.cocoanetics.com/2010/05/physics-101-uikit-app-with-box2d-for-gravity/
Básicamente, se crea un mundo y se aplica la física de B2D a las vistas que tengas. Muy simple y funciona. Sin embargo, traté de aplicar la misma lógica usando CALayers, es decir, programé capas, las agregué al view.layer principal e intenté animarlas.
Código de ejemplo para la creación de la capa:
CALayer *layer = [CALayer layer];
layer.backgroundColor = [UIColor blackColor].CGColor;
layer.frame = CGRectMake(50, 100, 30, 30);
layer.name = @"square";
[self.view.layer addSublayer:layer];
Y la física aplicada en el 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;
en cuenta que me he adaptado la transformación afín llamada a la clase CALayer.
He comprobado y verificado dos veces las variables, y los números parecen coincidir. Lo que obtengo es un rebote extraño de la animación CALayer y una animación perfecta de UIView. ¿Alguien con experiencia en Box2D y UIKit para responder por qué esto puede estar pasando?
¿Puede explicar "rebote raro" – erkanyildiz
Este: http://youtu.be/OpTXuqIgiPE - negro es CALayer, es verde UIView.The CALayer rebota antes de golpear el "suelo". Una razón me lleva a pensar que las dimensiones et al. son correctos se debe al hecho de que el CALayer finalmente deja de rebotar con la parte inferior del marco tocando el suelo. – hcabral