Применение физики Box2D к UIView и CALayer

Я использовал этот отличный учебник, чтобы начать небольшой проект, над которым я работаю, связанный с физикой :

http://www.cocoanetics.com/2010/05/physics-101-uikit-app-with-box2d-for-gravity/

. По сути, он создает мир и применяет физику B2D к любым представлениям, которые у вас есть. Очень просто и это работает. Однако я попытался применить ту же логику с помощью CALayers, т.е. программно создаю слои, добавляю их в основной view.layer и пытаюсь их анимировать.

Пример кода для создания слоя:

CALayer *layer = [CALayer layer];
layer.backgroundColor = [UIColor blackColor].CGColor;
layer.frame = CGRectMake(50, 100, 30, 30);
layer.name = @"square";
[self.view.layer addSublayer:layer];

И прикладная физика в тикер:

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;

Обратите внимание, что я адаптировал вызов аффинного преобразования к классу CALayer.

Я проверил и дважды -проверил переменные, и кажется, что числа совпадают. Что я получаю, так это странный отскок от анимации CALayer и идеальную анимацию от UIView. Кто-нибудь сталкивался с Box2D и UIKit, чтобы ответить, почему это может происходить?

5
задан hcabral 16 August 2012 в 16:18
поделиться