2

こんにちは、単純なコア アニメーションがあります。

NSString *keyPath2 = @"anchorPoint.y";
CAKeyframeAnimation *kfa2 = [CAKeyframeAnimation animationWithKeyPath:keyPath2];
[kfa2 setValues:[NSArray arrayWithObjects:
                 [NSNumber numberWithFloat:-.05],
                 [NSNumber numberWithFloat:.1],
                 [NSNumber numberWithFloat:-.1],
                 [NSNumber numberWithFloat:.1],
                 [NSNumber numberWithFloat:-.05],
                 nil]];
//[kfa2 setRepeatCount:10];
[kfa2 setRepeatDuration:30];
[kfa2 setDuration:.35];
[kfa2 setAdditive:YES];
[kfa2 setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];

アニメーションが繰り返される前に遅延を設定するにはどうすればよいですか?

そして、repeatCountとrepeatDurationの違いを誰かが説明できれば。

@selector を使用したくありません。

全てに感謝。

4

2 に答える 2

2

CAMediaTiming プロトコルのドキュメントによると、同時に設定する必要はrepeatCountありrepeatDurationませ。これは、 =を設定する別の方法に過ぎないrepeatCountことを意味します。repeatDurationrepeatCountrepeatCountrepeatDuration / duration

CAKeyframeAnimation最後の値を追加することで、遅延をシミュレートできます。たとえば、次のアニメーションがあります

kfa.values = @[@1, @3, @7]; // Using object literal syntax (Google it!), the way to go
kfa.keyTimes = @[@.0, @.5, @1]; // 0.5 = 5 / 10; 1 = 10 / 10;
kfa.duration = 10; // 10 sec, for demonstration purpose

そして、繰り返す前に 1 秒遅らせる必要があります。単純に次のように変更します。

kfa.values = @[@1, @3, @7, @7]; // An additional value
kfa.keyTimes = @[@.0, @.4546, @.9091, @1]; // 0.4546 = 5 / 11; 0.9091 = 10 / 11; 1 = 11 / 11
kfa.duration = 11;

計算はややこしいですが、かなり簡単です。

于 2013-10-23T23:28:23.330 に答える
-1

CAAnimationGroup も使用できます。

let scale         = CABasicAnimation(keyPath: "transform.scale") // or CAKeyFrameAnimation
scale.toValue = 2.0
scale.fillMode = kCAFillModeForwards
scale.duration    = 0.4
scale.beginTime   = 1.0 // Repeat delay.
let scaleGroup = CAAnimationGroup()
scaleGroup.duration    = scale.duration + scale.beginTime
scaleGroup.fillMode    = kCAFillModeForwards
scaleGroup.repeatCount = Float.infinity
scaleGroup.animations  = [scale]
scaleGroup.beginTime   = CACurrentMediaTime() + 0.8 // Initial delay.

let view = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
view.backgroundColor = UIColor.orange

let viewb = UIView(frame: CGRect(x: 50, y: 50, width: 100, height: 100))
viewb.backgroundColor = UIColor.blue
view.addSubview(viewb)

viewb.layer.add(scaleGroup, forKey: "")

// If you want to try this on Playground
PlaygroundPage.current.liveView = view
于 2016-07-27T04:08:24.233 に答える