バウンスするためにCAKeyframeAnimationレイヤーが追加された3つのuiviewがあります。現在、これらを各uiviewに少し遅れて追加し、繰り返すように設定しています。
私が彼らにやらなければならないことは繰り返すことですが、遅れて。したがって、ビュー1はアニメーション化されますが、ビュー2と3がアニメーション化されるまで待ってから、再開します。
開始時間の遅延を繰り返してCAKeyframeAnimationを繰り返すことに言及しているドキュメントのどこにも読めないようです。
誰かがビュー間の遅延を取得するためのアイデアを考えることができますか?
ありがとう
ダン
これまでのコード:
- (CAKeyframeAnimation *)jumpAnimation
{
// these three values are subject to experimentation
CGFloat initialMomentum = 80.0f; // positive is upwards, per sec
CGFloat gravityConstant = 250.0f; // downwards pull per sec
CGFloat dampeningFactorPerBounce = 0.6; // percent of rebound
// internal values for the calculation
CGFloat momentum = initialMomentum; // momentum starts with initial value
CGFloat positionOffset = 0; // we begin at the original position
CGFloat slicesPerSecond = 60.0f; // how many values per second to calculate
CGFloat lowerMomentumCutoff = 5.0f; // below this upward momentum animation ends
CGFloat duration = 0;
NSMutableArray *values = [NSMutableArray array];
do
{
duration += 1.0f/slicesPerSecond;
positionOffset+=momentum/slicesPerSecond;
if (positionOffset<0)
{
positionOffset=0;
momentum=-momentum*dampeningFactorPerBounce;
}
// gravity pulls the momentum down
momentum -= gravityConstant/slicesPerSecond;
CATransform3D transform = CATransform3DMakeTranslation(0, -positionOffset, 0);
[values addObject:[NSValue valueWithCATransform3D:transform]];
} while (!(positionOffset==0 && momentum < lowerMomentumCutoff));
CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
animation.duration = duration;
animation.fillMode = kCAFillModeForwards;
animation.values = values;
animation.repeatCount = HUGE_VAL;
animation.delegate =self;
animation.autoreverses = YES;
return animation;
}