2012-03-12 2 views
2

У меня возникла проблема с поворотным видом вокруг прыгающего мяча.Вращение UIView вокруг прыгающего шара на iPad

До сих пор у меня есть 2 UIViews в ViewController. Один из видов содержит CALayer с кварцевым рисунком шара на нем. В другом представлении содержится безьеровская квадратная рамка. Мяч отскакивает внутри рамы. Все это прекрасно работает.

Проблема в том, что я реализовал систему, которая позволяет пользователю вращать рамку с помощью жесты панорамирования. Это действительно работает очень хорошо, за исключением того, что когда кадр вращается, путь шара начинает кривиться, когда он должен двигаться по прямой. Все обнаружение столкновения все еще работает, только путь к шару, который подвергается воздействию. Как только вращение остановилось, все работает нормально. Я не могу понять, почему.

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

CGFloat translation = 250; 
NSArray *temp = [[outer layer] sublayers]; 
CAShapeLayer *layer = [temp objectAtIndex:0]; 
UIBezierPath *newPath = [UIBezierPath bezierPathWithCGPath:layer.path]; 
[newPath applyTransform:CGAffineTransformMakeTranslation(-translation, -translation)]; 
[newPath applyTransform:CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(rotationCounter))]; 
[newPath applyTransform:CGAffineTransformMakeTranslation(translation, translation)]; 
layer.path = newPath.CGPath; 

Наверное, не самый умный способ сделать это, но если честно, я не знаю, что я делаю!

Я попытался повернуть UIView с помощью:

[UIView animateWithDuration:0.1 animations:^{ 
    frame.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(rotationCounter)); 
    }]; 

Но я получил тот же probem. Я также попытался использовать CATransform3D на CALayer, на который нарисован фрейм, но опять то же самое произошло.

Кроме того, шар анимируется шаговым таймером, установленным на 60 кадров в секунду.

Извините, если это действительно расплывчато и спасибо всем, кто может помочь.

Приветствия,

Джеймс

ответ

0

Вы должны быть в состоянии просто поставить все (путь кадров, и мяч) внутри родительского вида, а затем применить преобразование поворота к этой точке зрения. Это позволит вращать систему координат всех дочерних представлений вместе, и все должно просто вращаться так, как вы этого хотите. Гораздо проще, чем вы пытаетесь сделать.

+0

Вращение рамки не должно влиять на траекторию мяча. Если я поворачиваю родительское представление, это повлияет на фрейм и шар. Я ранее изменил код для этого, так что оба CAShaplayers хранятся в одном слое UIView. Я просто использую CATransform на шейлере, который является фреймом. Одно дело в том, что если я устанавливаю фрейм четкого цвета, то поворот его не создает проблем для мяча. Я даже провел неделю, изучая и переписывая всю графику в opengl, и то же самое произошло! – GCBenson

Смежные вопросы