2014-02-04 2 views
4

Я пытаюсь не использоватьс помощью UIView animateWithDuration: Задержка: Xcode

[UIView animateWithDuration:1 delay:2 options:UIViewAnimationOptionCurveEaseIn animations:^{ 
} completion:^ (BOOL completed) {}   ]; 

Однако независимо от того, какого числа я ставлю за задержку, нет никакой задержки.
Я пытаюсь, чтобы ряд кнопок исчезал один за другим, когда была нажата другая кнопка. Поэтому я использую серию анимации UIView с различной продолжительностью задержки, но все они появляются одновременно, независимо от того, в какую временную задержку я вхожу. У кого-нибудь есть предложения?

+1

Не могли бы вы показать нам немного больше вашего кода в контексте? У фрагмента выше есть пустой блок анимации ... –

ответ

16

Прежде всего, значения animateWithDuration и delay являются float значения, и должны быть 1.0 и 2.0

Мнение: если ваш код на ViewDidLoad метод, попробуйте переместить его в обособленное функция

Во-вторых, если вы не можете сделать это в этом контексте, перейдите на другой или совершите прогулку, например, используя

performSelector:withObject:afterDelay 

Другая прогулка, чтобы установить delay 0, и поместить последующие UIView анимационные блоки в completion блоке предыдущих animateWithDuration заявлений

[UIView animateWithDuration:2.0 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut 
       animations:^(void) { 
     //Leave it empty 
       } 
       completion:^(BOOL finished){ 

// Your code goes here 
    [UIView animateWithDuration:1.0 delay:0.0 options: 
    UIViewAnimationOptionCurveEaseIn animations:^{ 
     } completion:^ (BOOL completed) {}]; 
    }]; 

PS: некоторые свойства не поддерживаются для анимированные, такие как установка текста внутри блока анимации, поэтому после того, как задержка закончилась, начинается анимация, которая сразу же изменяет текст, поскольку это изменение не является анимированным.

в анимации случае текста, чтобы сделать то, что вы хотите, изменить текст в блоке завершения следующим образом:

[UIView animateWithDuration:1.0 
         delay:2.0 
        options: UIViewAnimationOptionTransitionCrossDissolve 
       animations:nil 
       completion:^{ 
        lbl.text = @"My text" ; 
}]; 

Также backgroundColor является НЕ анимировать UIView. Вместо этого используйте свойство backgroundColor функции представления layer:

[[controller layer] setBackgroundColor:[[UIColor anyColor] CGColor]]; 
+1

Спасибо, это помогло много – user1114881

+0

Рад это услышать. – Mutawe

2

Или вы можете кодировать его в viewWillAppear.

- (void)viewWillAppear:(BOOL)animated { 
    [UIView animateWithDuration:1.0 
          delay:2.0 
         options:UIViewAnimationOptionTransitionCrossDissolve 
        animations:^{ 
         //yourAnimation 
        } completion:^(BOOL finished){ 
         NSLog(@"Animation is finished"); 
        }]; 
} 
+0

Удивительный ответ! Примите сейчас! – Genevios

1

Перед тем, как осуществить, пожалуйста, прочитайте его продолжительность: общая длительность анимации, измеряется в секундах. Если вы укажете отрицательное значение или 0, изменения будут сделаны без их анимации. Задержка: количество времени (измеренное в секундах) для ожидания перед началом анимации. Укажите значение 0, чтобы немедленно начать анимацию. варианты

-use значения с плавающей точкой для обоих указанных выше параметров - Было бы лед, если вы определяете работу анимации в отдельном рутинного &

вызов это подходящее место, как в ViewDidAppear/viewWillapear.

Use function like this & set your UI Element properties like this: 
[UIView animateWithDuration:0.6 
          delay:0.3 
         options: UIViewAnimationOptionCurveEaseInOut 
        animations:^{ 
         [self.view layoutIfNeeded]; 
         [yourviews setTintColor:[UIColor whiteColor]]; 
         self.view.backgroundColor = [UIColor greenColor]; 
        } 
        completion:^(BOOL finished){ 

         // You next action to perform after completion; 
        }]; 
} 

Счастливый кодирования, надеюсь, что это поможет.

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