Używałem ten doskonały poradnik do kickoff mały projekt pracuję nad fizyki z udziałem:Zastosowanie fizyki Box2D do UIView vs CALayer
http://www.cocoanetics.com/2010/05/physics-101-uikit-app-with-box2d-for-gravity/
Zasadniczo, tworzy świat i stosuje fizyki B2D do dowolnych widoków. Bardzo proste i działa. Jednak próbowałem zastosować tę samą logikę przy użyciu CALayers, tj. Programowo utworzyć warstwy, dodać je do głównego view.layer i spróbować je ożywić.
Przykładowy kod do tworzenia warstwy:
CALayer *layer = [CALayer layer];
layer.backgroundColor = [UIColor blackColor].CGColor;
layer.frame = CGRectMake(50, 100, 30, 30);
layer.name = @"square";
[self.view.layer addSublayer:layer];
A fizyka stosowana w 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;
Zauważ, że ja dostosowany affine przekształcić wezwanie do klasy CALayer.
Sprawdziłem i dwukrotnie sprawdziłem zmienne, a liczby wydają się pasować. To, co dostaję, to dziwne odbicie od animacji CALayer i idealna animacja z UIView. Czy ktoś ma doświadczenie w Box2D i UIKit, aby odpowiedzieć, dlaczego tak się dzieje?
można wyjaśnić „dziwne bounce” – erkanyildiz
to: http://youtu.be/OpTXuqIgiPE - czarne jest CALayer, Zieleń to UIView.The CALayer odbija się przed uderzeniem w "ziemię". Jeden powód skłania mnie do myślenia, że wymiary i in. są poprawne z uwagi na to, że CALayer ostatecznie przestaje podskakiwać, gdy dno kadru dotyka ziemi. – hcabral