1

transformビューのプロパティをアニメーション化しようとしています。これが私のコードです:

CAKeyframeAnimation *shakeAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
NSArray *transformValues = [NSArray arrayWithObjects:
                        [NSValue valueWithCGAffineTransform:CGAffineTransformMakeRotation((3*M_PI)/8)],
                        [NSValue valueWithCGAffineTransform:CGAffineTransformMakeRotation(-((3*M_PI)/8))],
                        [NSValue valueWithCGAffineTransform:CGAffineTransformMakeRotation((3*M_PI)/8)],
                        [NSValue valueWithCGAffineTransform:CGAffineTransformMakeRotation(-((3*M_PI)/8))],
                        [NSValue valueWithCGAffineTransform:CGAffineTransformMakeRotation((3*M_PI)/8)],
                        [NSValue valueWithCGAffineTransform:CGAffineTransformMakeRotation(-((3*M_PI)/8))],
                        nil];

[shakeAnimation setValues:transformValues];

NSArray *times = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.16f],[NSNumber numberWithFloat:0.33f],[NSNumber numberWithFloat:0.49f],[NSNumber numberWithFloat:0.66f],[NSNumber numberWithFloat:0.82f], [NSNumber numberWithFloat:1.0f], nil];

[shakeAnimation setKeyTimes:times];

NSArray *timingFunctions = [NSArray arrayWithObjects:
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut],
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 
nil];

[shakeAnimation setTimingFunctions:timingFunctions];

shakeAnimation.fillMode = kCAFillModeForwards;
shakeAnimation.removedOnCompletion = NO;
shakeAnimation.duration = 1.0f;

[self.someView.layer addAnimation:shakeAnimation forKey:@"anim"];

animationWithKeyPath:メソッドのパラメータを「transform」に設定すると、なぜかエラーになります。これをデバッグするために 30 分間試しましたが、エラーが見つかりません。最初は、UIView の変換プロパティで許可されていないアニメーションを実行していると思いましたが、次のようなことができることはわかっています。

aView.transform = CGAffineTransformMakeRotation(M_PI/2);

ありがとうございます。

4

1 に答える 1

4

transform画層のプロパティの値はCATransform3DではなくCGAffineTransformです。

transform.rotation.zまた、キー パスをアニメートする方が簡単な場合もあります。値は単なる であるCGFloatため、変換行列を作成する必要はまったくありません。

Core Animation Programming Guideの「Modifying a Transform Using Key Paths」Core Animation Programming Guide
の「Key Path Support for Structure Field」

于 2012-06-20T03:06:05.153 に答える