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

Чтобы описать контекст: у меня есть круглый циферблат, который я нарисовал в компьютерной графике и добавил к основному виду в качестве подпредставления. В ответ на жесты смахивания я приказываю ему повернуться на 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];
    }];
} 
0
Cocoadelica 31 Авг 2011 в 00:29

2 ответа

Лучший ответ

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

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

3
Kaiser 30 Авг 2011 в 20:33

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

    - (IBAction) onRotateMyView: (id) sender
    {

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

     ++rotationCounter;
}
1
n8tr 13 Фев 2012 в 20:13