Вращение UIView вокруг прыгающего мяча на iPad - PullRequest
2 голосов
/ 12 марта 2012

У меня проблема с вращением вида вокруг прыгающего мяча.

Пока у меня есть 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));
     }];

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

Кроме того, шар оживляется с помощью таймера шага, установленного на 60 кадров в секунду.

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

Приветствия

Джеймс

1 Ответ

0 голосов
/ 17 мая 2012

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

...