блокировать анимацию: установить UIViewAnimationOptionCurveLinear - PullRequest
1 голос
/ 03 апреля 2011

Извините, это очень просто, но я не могу установить для параметра AnimationOption по умолчанию (EaseIn) значение CurveLinear. Вот что я попробовал, основываясь на том, что я прочитал в других темах:

    -(void)animationShadow;
{
    [UIView animateWithDuration:4
                        options:UIViewAnimationOptionCurveLinear
                     animations:^{
...

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

Вот весь блок анимации:

   -(void)animationShadow;
{
    [UIView animateWithDuration:4
                        options:UIViewAnimationOptionCurveLinear
                     animations:^{

        //UIViewAnimationOptionCurveLinear

        // animation 1
        [pageShadowView setTransform:CGAffineTransformMakeScale (3, 1)];
        [pageShadowView setFrame:CGRectMake(0-350, 0, CGRectGetWidth(pageShadowView.frame), CGRectGetHeight(pageShadowView.frame))];

        [UIView beginAnimations:@"pageCurlRightToLeftFinished" context:nil]; // Begin animation
        //[UIView setAnimationCurve:UIViewAnimationCurveLinear];
        [pageShadowView setFrame:CGRectMake(0-280, 0, CGRectGetWidth(pageShadowView.frame), CGRectGetHeight(pageShadowView.frame))];
        [UIView commitAnimations];



    } completion:^(BOOL finished){ ...

EDIT:

ОК, я теперь обновил это, но я все еще вылетает, если я делаю вторую анимацию. Я получаю предупреждение: UIView может не отвечать на + animateWithDuration ...:

- (Недействительными) animationShadow; {

[pageShadowView setTransform:CGAffineTransformMakeScale (3, 1)];
[pageShadowView setFrame:CGRectMake(0-350, 0, CGRectGetWidth(pageShadowView.frame), CGRectGetHeight(pageShadowView.frame))];


[UIView animateWithDuration:kPageCurlSpeed/4
                      delay:0
                    options:UIViewAnimationOptionCurveLinear
                 animations:^{
            [pageShadowView setFrame:CGRectMake(0-280, 0, CGRectGetWidth(pageShadowView.frame), CGRectGetHeight(pageShadowView.frame))];
                            }
                 completion:^(BOOL finished){


                     [UIView animateWithDuration:kPageCurlSpeed
                                           delay:0
                                         options:UIViewAnimationOptionCurveLinear
                                      animations:^{
                                          // animation 2

                                          [pageShadowView setTransform:CGAffineTransformMakeScale (0.1, 1)];
                                          [pageShadowView setFrame:CGRectMake((340-pageShadowView.frame.size.width), 0, CGRectGetWidth(pageShadowView.frame), CGRectGetHeight(pageShadowView.frame))];

                                      }
                      ]; // this is where I get the warning!!



                     }];

}

Ответы [ 2 ]

8 голосов
/ 03 апреля 2011

Редактировать: Код инициализации анимации следует размещать вне блока анимации. Блок указывает конечное состояние, которого должны достичь виды в конце анимации.

[pageShadowView setTransform:CGAffineTransformMakeScale(3, 1)];
[pageShadowView setFrame:CGRectMake(-350, ...)];

[UIView animateWithDuration:4 delay:0
                    options:UIViewAnimationOptionCurveLinear 
                 animations:^{
                              [pageShadowView setFrame:CGRectMake(-280, ...)];
                            }
                 completion:NULL];

Если вы хотите запустить 2 анимации последовательно, вторая должна быть помещена в блок completion.

[UIView animateWithDuration:4 delay:0
                    options:UIViewAnimationOptionCurveLinear
                 animations:^{ /* animation 1 */ }
                 completion:^(BOOL finished) {
                               /* animation 2 */
                            }];
5 голосов
/ 28 сентября 2012

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

Существует один с именем UIViewAnimationCurveLinear (для более старых методов) и UIViewAnimationOptionCurveLinear (для блочных методов), и его легко смешать. Есть соответствующие эквивалентные пары для облегчения, облегчения и т. д.

Это застало меня врасплох, поэтому я решил, что информация будет легко видна другим.

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