3

同時にいくつかのアニメーションを実行しようとしています。1 つは 1 つの uimageview から別の uimageview への遷移で、もう 1 つはラベルの translation.x のアニメーションです。ラベルは uiimageview の上にあります。

しかし、私が得るのは、翻訳が正常に機能してすぐに移行が行われるか、非表示のプロパティに基づく移行が、シフトされるだけのラベルにも適用されることです(非表示から表示にもなります)。caanimationgroup は異なるビューに適用されるため、使用できません。

//ラベルをスライドさせるCAKeyFrameAnimation

...

CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"transform.translation.x"];

NSArray *xValues = @[[NSNumber numberWithFloat:myLabel.bounds.origin.x],
                [NSNumber numberWithFloat:myLabel.bounds.origin.x + screenHalf],
                [NSNumber numberWithFloat:myLabel.bounds.origin.x + screenHalf * 4]];
[anim setValues:xValues];

NSMutableArray *timeFrames = [NSMutableArray array];

CGFloat timeStep = 1.0 / ([xValues count] - 1);

for (NSInteger i = 0; i < [xValues count]; i++)
{
    [timeFrames addObject:[NSNumber numberWithFloat:timeStep * i]];
}

[anim setKeyTimes:timeFrames];

[anim setDuration:duration];
[anim setFillMode:kCAFillModeForwards];
[anim setRemovedOnCompletion:FALSE];

[myLabel.layer addAnimation:anim forKey:nil];
...

// uiimageview から別のビューへの遷移

...
CATransition *transition = [CATransition animation];
[transition setDuration:duration];
[transition setType:kCATransitionFade];

//These two are uiimageviews i'm switching from and to
initial.hidden = TRUE;
next.hidden = FALSE;

//Initial and next are subviews of container which itself is a subview of viewcontroller's main view
[container.layer addAnimation:transition forKey:@""]; 

上記のようなアニメーションを呼び出すと、遷移がすぐに発生し、ラベルが画面全体に正しくスライドします。最後の行を次のように変更すると:

[self.view.layer addAnimation:transition forKey:@""];

次に、非表示のアニメーションも myLabel に適用されます。上記のようなアニメーションを組み合わせた場合の修正は何ですか? また、さらに詳しく説明すると、その原因は何ですか?

4

1 に答える 1

0

コード全体を CATransaction にラップして、さまざまな CAAnimations を 1 つのグループにグループ化します。

CAKeyFrameAnimation でこれを使用するための疑似コードは次のようになります。

[CATransaction begin];
// set completion block if you want
[CATransaction setCompletionBlock:^{ NSLog(@"I'm done"); }];

// start a keyframe animation
CAKeyframeAnimation *key1 = .....

// start another keyframe animation block
CAKeyframeAnimation *key2 = ......

// Maybe do a basic animation
CABasicAnimation *anim1 = .....

// close out all the animations and have them start
[CATransaction commit];
于 2013-04-02T13:52:55.417 に答える