2013-06-19 2 views
1

Используя простой CGAffineTransformMakeScale, чтобы сделать импульсную метку, я получаю сообщение об ошибке при попытке применить параметры отключения, задержку и т. Д. Во втором блоке? Без этого я отрывисто анимацию как им получить легкость на увеличение и ни на возвращение к исходному размеруПараметры анимации не соблюдаются/ошибка во втором блоке анимации

[UIView animateWithDuration:1.0f delay:0 options: UIViewAnimationCurveEaseInOut|UIViewAnimationOptionAllowUserInteraction animations: ^{ 

[UIView setAnimationRepeatCount:10]; 

    self.transform = CGAffineTransformMakeScale(1.1,1.1); 

} completion:^(BOOL finished) { 


    [UIView animateWithDuration:1.0 animations:^{ // <<< "No known method for selector" error here if I add options 

     self.transform = CGAffineTransformMakeScale(1.0,1.0); 

    }]; 
}]; 
+0

Кстати, вы опустили '' Option' в UIViewAnimationOptionCurveEaseInOut'. Оказывается, что это не имеет значения для простоты в использовании (потому что они оба равны нулю), но если вы используете одно из других значений, например простота, они совершенно разные значения. – Rob

+0

спасибо за подсказку – JSA986

ответ

0

Если вы хотите, чтобы он анимировал десять раз, а затем остановился, вы можете использовать опции UIViewAnimationOptionRepeat10 и UIViewAnimationOptionAutoreverse. Таким образом, он будет изящно возвращаться обратно к оригиналу, прежде чем повторять. Он также избавляет от необходимости оживить его обратно в конце:

[UIView animateWithDuration:1.0 
         delay:0.0 
        options:UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse | UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction 
       animations:^{ 
        [UIView setAnimationRepeatCount:10]; 
        self.viewToResize.transform = CGAffineTransformMakeScale(1.1, 1.1); 
       } 
       completion:^(BOOL finished) { 
        self.viewToResize.transform = CGAffineTransformIdentity; 
       }]; 
+0

То, что я после благодарности – JSA986

0

не делают цепи анимации, как это. Используйте API-интерфейс нижнего уровня CoreAnimation, чтобы указать анимацию с ключевыми кадрами. Вот пример, который имитирует способ появляется UIAlertView на экране:

CAKeyframeAnimation* bounceAnim = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"]; 
bounceAnim.duration = 0.4f; 
bounceAnim.values = @[ @0.01f, @1.1f, @0.9f, @1.f ]; 
bounceAnim.keyTimes = @[ @0.f, @0.5f, @0.75f, @1.f ]; 
bounceAnim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
bounceAnim.fillMode = kCAFillModeBoth; 
bounceAnim.removedOnCompletion = YES; 

[dialog.layer addAnimation:bounceAnim forKey:@"bounce"]; 

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

+0

Почему бы не цеплять анимации, используя полный блок? В вопросе это неправильно реализовано, но это приемлемая практика. Я согласен с тем, что анимация ключевых кадров превосходна, когда вам нужен этот дополнительный уровень управления, но нет ничего плохого в том, чтобы добавить еще одну анимацию в блок завершения другого. Как говорят документы: «Для блочных анимаций используйте обработчик завершения, поддерживаемый методами анимации: animateWithDuration: анимации: завершение:' и 'animateWithDuration: delay: options: animations: completion:' для выполнения любых последующих анимаций. " – Rob

+1

Вопрос звучал для меня, что искатель хотел, чтобы блоки многократно звоняли друг другу, чтобы «пульсировать». По очевидным причинам это не сработало бы. – Idles

+0

Согласовано. Извините, я думал, что вы издаете общее предупреждение, потому что размещение анимаций внутри блока завершения довольно распространено. Но вы совершенно правы, что его попытка не будет работать, учитывая желаемый UX. – Rob

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