Я нашел простой способ исправить это. Вместо использования стандартного объекта CALayer в качестве базового слоя создайте свой собственный класс (на основе CALayer), который имеет один вызов:
- (void)layoutSublayers;
{
for(sprite* aSprite in self.sublayers)
{
// -(y pos -1) flips the coordinate system to start in the lower left
aSprite.position = CGPointMake(aSprite.actualPosition.x, -(aSprite.actualPosition.y - 1.0));
}
}
sprite - это просто класс CALayer с добавленным свойством CGPoint, factPosition. Обновите это значение, чтобы переместить спрайт.