iPhone SDK: блочная анимация игнорирует ошибку с кривой дорогой - PullRequest
1 голос
/ 11 августа 2011

Я создаю приложение, в котором пользователь может нарисовать линию на экране от объекта до места, куда он хочет отправить его, и затем объект будет следовать за линией до конечного местоположения. Для этого я уже создал рабочие методы, позволяющие пользователю рисовать линии, а затем сохранять координаты линии в MutableArray. Однако у меня возникают некоторые проблемы, когда я пытаюсь оживить. Поскольку я довольно плохо знаком с iPhone OS, это может быть простой проблемой, но я пока не смог найти решение.

Я НЕ использую пути Безье, поскольку пользователь рисует линию вручную, я не рисую ее программно.

Вот код, который я пробовал

-(void)animateButtonWasPressed
{
        for (int f = 0; f < [cordArrayY count]; f++) {
            NSString *newY = [cordArrayY objectAtIndex:f];
            NSString *newX = [cordArray objectAtIndex:f];

            [self myAnimate:newX :newY];
        }
}

-(void)myAnimate:(NSString *)PntX :(NSString *)PntY
{
    [UIView animateWithDuration:.5 animations:
     ^{
         object.center = CGPointMake([PntX floatValue], [PntY floatValue]);
     }];

}

СИНТАКСИС: объект - объект, который я пытаюсь переместить cordArray - изменяемый массив, содержащий координаты x cordArrayY - изменяемый массив, содержащий y-координаты

Все остальное определяется либо кодом, либо методами Apple

Проблема: объект мгновенно перемещается из своего исходного местоположения прямо в конечное местоположение. Я получаю NSLog, который говорит мне это:

-[UIApplication endIgnoringInteractionEvents] called without matching -beginIgnoringInteractionEvents. Ignoring.

Буду признателен за любую помощь!

Ответы [ 2 ]

0 голосов
/ 16 августа 2011

Я наконец смог решить эту проблему:

Сначала я попытался продолжить использовать метод, который у меня был выше.Совет Лио по использованию блока «завершение» был идеальным, но, так как мне нужно было его зацикливать неопределенное количество раз, мне пришлось бы использовать переменную counter.Блочное программирование iPhone не позволяет изменять внешние переменные или использовать объявление _block, поэтому у меня это не сработало.

Однако я в конечном итоге создал всю анимацию, используя NSTimer, в описанном методе.здесь просто используя мои координаты массива вместо:

http://www.icodeblog.com/2008/10/28/iphone-programming-tutorial-animating-a-ball-using-an-nstimer/

0 голосов
/ 11 августа 2011

Метод, который вы используете для анимации "объекта", кажется нормальным. Я считаю, что проблема заключается в цикле, в котором вы вызываете этот метод. Вы пытаетесь анимировать одно и то же свойство объекта снова и снова на каждом шаге этого цикла. Я думаю, что это вызывает этот «прыжок».

Посмотрите на эту цитату из документации Apple:

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

http://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/AnimatingViews/AnimatingViews.html#//apple_ref/doc/uid/TP40009503-CH6

В результате запуска анимации на каждом шаге вы получите анимацию объекта примерно за 0,5 секунды до последней позиции вашего массива координат.

Я думаю, что вы должны связать эти анимации вместе, но вам следует дождаться окончания каждой анимации, чтобы начать следующую. Взгляните на это

Другое дело, что оба animateWithDuration: animations: creation: и animateWithDuration: задержка: параметры: анимация: завершение: методы поддержка - это возможность указать блок обработчика завершения. Вы может использовать обработчик завершения, чтобы сообщить вашему приложению, что конкретная анимация закончена. Обработчики завершения также способ связать отдельные анимации вместе.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...