レイヤーを親ビューと同じサイズに保ちながら、カスタム UIView の境界をアニメーション化しようとしています。そのために、レイヤーの境界をその親ビューと一緒にアニメーション化しようとしています。カスタム描画が境界に沿って正しくサイズを変更するように、アニメーションとして drawLayer:withContext AS を呼び出すレイヤーが必要です。
drawLayer が正しく呼び出され、アニメーションを開始する前に正しく描画されます。しかし、レイヤーが境界アニメーションの各ステップで drawLayer メソッドを呼び出すことができません。代わりに、一度だけ呼び出され、アニメーションの最終フレームで「終了境界」にすぐにジャンプします。
// self.bg is a property pointing to my custom UIView
self.bg.layer.needsDisplayOnBoundsChange = YES;
self.bg.layer.mask.needsDisplayOnBoundsChange = YES;
[UIView animateWithDuration:2 delay:0 options:UIViewAnimationOptionCurveEaseOut|UIViewAnimationOptionAutoreverse|UIViewAnimationOptionRepeat animations:^{
[CATransaction begin];
self.bg.layer.bounds = bounds;
self.bg.layer.mask.bounds = bounds;
[CATransaction commit];
self.bg.bounds = bounds;
} completion:nil];
境界が (最終フレームだけでなく) アニメーションとして変更を報告しないのはなぜですか? 私は何を間違っていますか?