Я использовал этот отличный учебник, чтобы начать небольшой проект, над которым я работаю, связанный с физикой :
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, чтобы ответить, почему это может происходить?