Есть ли простой способ, чтобы анимация не достигла цели, а затем вернулась? - PullRequest
2 голосов
/ 07 октября 2011

Есть ли простой способ, чтобы анимация вышла за пределы цели и затем вернулась?

Итак, скажем, я хотел бы масштабировать круг с 50% до 110%, а затем обратно до 100%, создавая почти мультипликационный эффект.

Я думаю, что Flash или какой-нибудь плагин jQuery имеют что-то вроде этого встроенного в качестве опции замедления. Есть ли в iOS что-то подобное или это нужно делать вручную?

Ответы [ 3 ]

4 голосов
/ 08 октября 2011

Вам не нужно делать это вручную. Вы можете сделать это почти автоматически с помощью методов анимации UIView.

Вы можете установить целевой размер на 110%, а анимацию повернуть вспять и «повторить». В этом случае вы устанавливаете количество повторений на 0,58. То есть, сделайте половину полного цикла возврата и возврата, затем 1/6 от этого больше.

Это еще не все. Если вы просто сделаете это, после завершения анимации она вернется к 110%. Поэтому вам нужно установить его обратно на 100%, чтобы удерживать его в целевом положении.

Как это:

// make it 50% size initially; maybe you already did that
circleView.transform = CGAffineTransformMakeScale(0.5,0.5);

[UIView animateWithDuration:1.0 / 0.58 // actual duration 1.0s
        animations:^{
            [UIView setAnimationRepeatCount:0.58];
            [UIView setAnimationRepeatAutoreverses:YES];
            circleView.transform = CGAffineTransformMakeScale(1.1,1.1);
        }
        completion:^(BOOL finished){
            circleView.transform = CGAffineTransformIdentity;
        }
]
3 голосов
/ 07 октября 2011

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

0 голосов
/ 07 октября 2011

Это всего лишь две анимации - начните вторую в блоке, когда первая будет завершена. Параметры замедления связаны с тем, как они ускоряются / замедляются в анимации.

Вот основная идея

http://objcolumnist.com/2010/09/19/core-animation-using-blocks/

В вашем коде вы бы хотели запустить следующую анимацию в финишном блоке.

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