2013-11-18 3 views
1

У меня есть метод, называемый performSelector:withObject:afterDelay:, который выполняет анимацию с длительностью. Так после задержки, анимация работает, но без продолжительности анимации:performSelector: withObject: afterDelay: выполняет анимацию без анимации

[self performSelector:@selector(animate:) withObject:[NSNumber numberWithInt:-1] afterDelay:4.0]; 

-(void) animate:(int) mode 
{ 
[UIView animateWithDuration:0.2 
         delay:0.0 
        options:UIViewAnimationOptionCurveEaseIn 
       animations:^{ 
        self.center = CGPointMake(160.0, 568.0 + mode*height/2); 
       } 
       completion:nil]; 
} 

Кроме того, я не могу гнездо анимации в completion:, потому что это взаимодействие блоков UI.

ответ

0

Я пробовал ваш код и продолжительность анимации отлично работает, но я думаю, вы должны исправить часть (int). Вы не можете бросить NSNumber в int таким образом. Ваш метод должен быть - (void) анимировать: (NSNumber *) и после того, как вы можете применить к int с [mode intValue].

+0

Благодарим вас за комментарий. Я нашел свою ошибку. Я пропустил неправильное значение режима (1 вместо -1) – user3003787

+0

Ваше приветствие, вы можете принять в качестве ответа. – BoranA

0

Вы не можете использовать performSelector:withObject:afterDelay: с animate:, потому что у него есть параметр, который не является объектом-указателем.

+0

По какой-то причине он по-прежнему работал. Тем не менее, он изменил его на - (void) aimate: (NSNumber *) mode – user3003787

+0

@ user3003787: Вы сталкиваетесь с неопределенным поведением. Технически, поскольку «int» и указатели имеют одинаковый размер, происходит то, что указатель на объект интерпретируется как int. – newacct

Смежные вопросы