1

CAKeyframeAnimation と CAAnimationGroup を使用して、複数のビュー (レイヤー) をアニメーション化しようとしています。アニメーション化される各ビューは、配列に含まれています。私の考えは、各ビューの CAKeyframeAnimation インスタンスがアニメーションの配列に追加される配列をループし、それが CAAnimationGroup に追加されることです。私の目標は、各ビューを次々にアニメーション化することです。私が理解している限り、beginTime の参照を取得するには、グループを使用する必要があります。

明らかな何かが欠けている可能性がありますが、私のコードは機能しません

CAAnimationGroup *cardAnimationGroup = [CAAnimationGroup animation];
cardAnimationGroup.delegate = self;
cardAnimationGroup.removedOnCompletion = NO;
cardAnimationGroup.beginTime = 0.0f;
[cardAnimationGroup setValue:@"animation0" forKey:@"id"];
cardAnimationGroup.duration = 1.2f * [_myViewsArray count];

NSMutableArray *animationsArray = [[NSMutableArray alloc] init];


// Loop through views
for (UIView *cardView in _myViewsArray)
{

    NSUInteger index = [_myViewsArray indexOfObject:cardView];
    // my target origin
    CGFloat yOffset = (-(cardView.frame.origin.y - _middleCardView.frame.origin.y) - index * 2);

    CAKeyframeAnimation *translateCardPositionAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.translation.y"];
    translateCardPositionAnimation.removedOnCompletion = YES;
    //translateCardPositionAnimation.fillMode = kCAFillModeForwards;
    translateCardPositionAnimation.beginTime = 1.2f * index;
    translateCardPositionAnimation.duration = 1.2f;

    translateCardPositionAnimation.values = [NSArray arrayWithObjects:
                                                   [NSNumber numberWithFloat:0.0f],
                                                   [NSNumber numberWithFloat:yOffset],
                                                   [NSNumber numberWithFloat:yOffset],nil];

    translateCardPositionAnimation.keyTimes = [NSArray arrayWithObjects:
                                                     [NSNumber numberWithFloat:0.0f],
                                                     [NSNumber numberWithFloat:1.0f],
                                                     [NSNumber numberWithFloat:1.2f], nil];


    [_containerCardView addSubview:cardView];
    [_containerCardView sendSubviewToBack:cardView];

    [animationsArray addObject:translateCardPositionAnimation];
    [cardView.layer addObject:translateCardPositionAnimation forKey:@"id"];

    if (index == [_myViewsArray count]-1) {
        [cardAnimationGroup setAnimations:animationsArray];

    }

}
4

0 に答える 0