iOS - продвижение анимации в реальном времени при панорамировании с помощью UIPanGestureRecognizer - PullRequest
2 голосов
/ 08 марта 2011

В основном я хочу повторить вращение шара.

В реальном мире вы бы указали пальцем на глобус и переместили его вправо, а когда вы двигаете пальцем, глобус вращается вправо.

На iPhone все не так просто ...

Это может быть что-то простое: палец опускается на экран и захватывается точка X, а затем, когда палец перемещается на один пиксель вправо, шар поворачивает один кадр вправо, а начало координат меняется на новое место. Затем, если палец возвращается к исходному месту, шар поворачивается на один кадр влево. Все, не поднимая палец ...

Так, как я мог пойти об этом? Я предполагаю, что есть событие whileTouching, которое будет выполняться постоянно / каждые 500 мс / и т. Д. *

Кто-нибудь знает такой пример кода?

Редактировать : с помощью самого кадра можно управлять захватом события касания, которое я не могу понять.

Ответы [ 2 ]

1 голос
/ 09 марта 2011

UIPanGestureRecognizer будет продолжать вызывать свои методы действий при каждом движении пальца. Вы используете состояние, чтобы определить, как изменить текущий вид.

В этом примере кода предполагается, что контроллер представления вида обрабатывает жест.

- (void)handlePanGesture:(UIPanGestureRecognizer *)panGesture //Your action method
{
    switch(panGesture.state) {
        case UIGestureRecognizerStateChanged:
            CGPoint translation = [panGesture translationInView:self.view];
            // Rotate the globe by the amount in translation
            // Fall through to began so that the next call is relative to this one
        case UIGestureRecognizerStateBegan:
            [panGesture setTranslation:CGPointZero inView:self.view];
            break;
        case UIGestureRecognizerStateEnded:
            CGPoint velocity = [panGesture velocityInView:self.view];
            // The user lifted their fingers. Optionally use the velocity to continue rotating the globe automatically
            break;
        default:
            // Something else happened. Do any cleanup you need to.
    }
}
1 голос
/ 09 марта 2011

Похоже, вы должны использовать UIPanGestureRecognizer для этого. По сути, это будет отслеживать нажатие пальцем и его перевод в определенном виде, пока палец нажат.

Краткая идея для кодирования будет выглядеть примерно так:

UIPanGestureRecognizer *touch = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(someFunction:);
[self.view addGestureRecognizer:touch];
[touch release]; 

Это добавит распознаватель жестов к вашему виду (при условии, что этот код находится в контроллере представления). Затем вам нужно будет добавить код «вращения глобуса» внутри функции «someFunction».

Примерно так:

-(void) someFunction:(UIPanGestureRecognizer *)recognizer {
    CGPoint translation = [recognizer translationInView:self.view]; 

    // Your globe rotation code goes here
}

[распознаватель translationInView: self.view] даст вам перевод вашего распознавателя жестов. Вы можете использовать это для установки изображения или трансформации вашего земного шара, однако вы имеете дело с фактическим вращением.

Надеюсь, это поможет.

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

...