Ошибка поворота объекта UIView с использованием Core Animation и блоков - PullRequest
0 голосов
/ 31 августа 2011

У меня проблема с объектом подкласса UIView, который я вращаю с использованием Core Animation в ответ на UISwipeGesture.

Для описания контекста: у меня есть круглый циферблат, который я нарисовал в CG и добавилна основной вид в качестве подпредставления.В ответ на жесты смахивания я даю указание повернуть его на 15 градусов в любом направлении, в зависимости от того, смахивание влево или вправо.

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

- (IBAction)handleLeftSwipe:(UISwipeGestureRecognizer *)sender 
{
    if ([control1 pointInside:[sender locationInView:control1] withEvent:nil]) 
    {
    //updates the display value
    testDisplay.displayValue = testDisplay.displayValue + 0.1;
    [testDisplay setNeedsDisplay];

    //rotates the dial
    [UIView animateWithDuration:0.25 animations:^{
        CGAffineTransform  xform = CGAffineTransformMakeRotation(radians(+15));
        control1.transform = xform;
        [control1 setNeedsDisplay];
    }];
} 

Ответы [ 2 ]

3 голосов
/ 31 августа 2011

CGAffineTransform xform = CGAffineTransformMakeRotation (радианы (+15));

Вы сохраняете в сумме, как далеко вращениеCGAffineTransformMakeRotation не являются аддитивными.Используется только самый последний.Таким образом, вы устанавливаете его на 15 каждый раз, а не на 15 каждый раз.

1 голос
/ 14 февраля 2012

Вот супер простой пример поворота представления кумулятивно.Это поворачивает вид на 180 градусов при каждом нажатии кнопки.

    - (IBAction) onRotateMyView: (id) sender
    {

     [UIView animateWithDuration:0.3 animations:^{
          myView.transform = CGAffineTransformMakeRotation(M_PI/2*rotationCounter);
     } completion:^(BOOL finished){
        //No nothing
     }];

     ++rotationCounter;
}
...