何か初歩的なことを見落としているような気がしますが、インターネットで間違っていること以外にそれを見つける良い方法はありますか?
私はかなり基本的なUIを持っています。私のビューUIViewController
はサブクラスであり、そのサブクラス+layerClass
はCAGradientLayer
. ユーザーのアクションに応じて、いくつかの UI 要素を移動し、背景のグラデーションの値を変更する必要があります。コードは次のようになります。
[UIView animateWithDuration:0.3 animations:^{
self.subview1.frame = CGRectMake(...);
self.subview2.frame = CGRectMake(...);
self.subview2.alpha = 0;
NSArray* newColors = [NSArray arrayWithObjects:
(id)firstColor.CGColor,
(id)secondColor.CGColor,
nil];
[(CAGradientLayer *)self.layer setColors:newColors];
}];
問題は、このブロックでサブビューに加えた変更はうまくアニメーション化されますが (物が移動してフェードします)、グラデーションの色への変更はそうではありません。交換するだけです。
ドキュメントには、アニメーション ブロック内の Core Animation コードはブロックのプロパティ (期間、イージングなど) を継承しないと書かれています。しかし、アニメーション トランザクションがまったく定義されていないということでしょうか。(ドキュメントの意味は、デフォルトのアニメーションが得られるように思われますが、私は何も得られません。)
これを機能させるには明示的に使用する必要がありますか? CAAnimation
(もしそうなら、なぜですか?)