Анимация кадра с помощью CoreAnimation

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

В любом случае, я не могу заставить его анимировать изменение происхождения кадра. Я не уверен, что мне не хватает, потому что, если я отключу то, что анимируется (сделайте первый // * на / *), он отлично сработает, изменив непрозрачность.

- (void)slideInStories;
{
    float scrollViewContentWidth = 0;

    for (StoryViewController *storyController in storyControllers) {
        NSMutableArray *animationPoints = [NSMutableArray array];
        CGRect viewFrame = storyController.view.frame; 

        //*
        CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"frame"];
        [animationPoints addObject:[NSValue valueWithCGRect:viewFrame]];

        viewFrame.origin.x = scrollViewContentWidth - 10;
        [animationPoints addObject:[NSValue valueWithCGRect:viewFrame]];

        viewFrame.origin.x = scrollViewContentWidth;
        [animationPoints addObject:[NSValue valueWithCGRect:viewFrame]];
        /*/
        CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"opacity"];
        [animationPoints addObject:[NSNumber numberWithFloat:0.75]];
        [animationPoints addObject:[NSNumber numberWithFloat:0.0]];
        [animationPoints addObject:[NSNumber numberWithFloat:0.75]];
        //*/

        [animation setValues:animationPoints];

        [animation setDuration:4.0];

        viewFrame.origin.x = scrollViewContentWidth;
        scrollViewContentWidth += viewFrame.size.width;
        [storyController.view.layer setFrame:viewFrame];
        [storyController.view.layer setOpacity:1.0];
        [storyController.view.layer addAnimation:animation forKey:nil];
    }

    [scrollView setContentSize:CGSizeMake(scrollViewContentWidth, 187.0f)];
}

person dustins    schedule 18.05.2011    source источник
comment
Вы пробовали просто ради удовольствия вместо этого анимировать center?   -  person jscs    schedule 18.05.2011
comment
@ Джош Касвелл - Да, я отлично справлюсь с этой позицией.   -  person dustins    schedule 18.05.2011


Ответы (1)


Вы не можете анимировать кадр CALayer.

person Daniel Burke    schedule 18.05.2011
comment
Спасибо, это сводило меня с ума! - person dustins; 18.05.2011
comment
Я знал, что где-то это видел, но ссылка на класс говорит, что он можно анимировать! Ошибка документа? - person jscs; 18.05.2011
comment
@JoshCaswell Вы связались со свойством фрейма UIView. Я не знаю, можно это анимировать или нет. Однако в опубликованном коде @dustins он специально добавляет анимацию к слою. Возможно, ему также следует использовать методы блочной анимации в UIView? Я не использовал Core Animation непосредственно на объектах UIView, поэтому не могу сказать наверняка. - person Daniel Burke; 19.05.2011
comment
Анимация слоя, а не вида - вот и все. Спасибо, что указали на ошибку. - person jscs; 19.05.2011