Можно ли изменить свойство center в UIView внутри переопределенного метода touchesEnded и перерисовать представление? - PullRequest
0 голосов
/ 04 мая 2011

Я хочу реализовать простую анимацию, основанную на свойстве центра UIView.У меня есть простой вид, и я могу перетащить его (UIView touchSMoved переопределяется).Анимация должна постепенно исчезать, когда представление перемещается по собственной инерции в течение некоторого времени после того, как пользователь отпускает его.Но сейчас я хочу просто переместить вид после касания заканчивается.Вот код, который у меня есть в touchesEnded:

int i;
    for (i=1;i<4;i++)
    {
        self.center = CGPointMake(10*i, 12*i);
        [self setNeedsDisplay];
        usleep(100000);
    }

Проблема в том, что когда я его запускаю, код выполняется красиво, но "UIView" меняется на поздний.Я изменил время сна и другие параметры, но результат тот же.Похоже, что все «ожидающие изменения» в представлении выполняются только после завершения переопределенных штрихов.

Это правильный способ реализации такой функции пользовательского интерфейса или я должен искать другие подходы?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 04 мая 2011

Если вы знаете, какие конечные позиции вы хотите иметь в центре просмотра, вы можете сделать это с анимацией:

[UIView animateWithDuration:20
                      delay:0
                    options: UIViewAnimationOptionCurveEaseIn
                 animations:^{
                         youView.center = CGPointMake(newCenterX, newCenterY);
                       }
                       completion:^(BOOL finished){ 
                       }];
0 голосов
/ 04 мая 2011

Если этот код выполняется внутри touchesEnded, вы блокируете основной поток, и поэтому анимация происходит сразу после завершения.Вам нужно будет запустить этот цикл в фоновом режиме, чтобы обновить вид с течением времени.При обновлении пользовательского интерфейса не забывайте всегда перезванивать в основной поток.

Некоторые параметры потоков:

executeSelectorInBackground: withObject:

executeSelectorOnMainThread: withObject: waitUntilDone:

Grand Central Dispatch

Threading

...