カスタム UIView クラスを取得して背景をフェードさせようとすると問題が発生します。次の StackOverflow の質問を確認しましたが、うまくいかないようです。
CALayer の backgroundColor を明示的にアニメーション化するにはどうすればよいですか?
だから私は、ユーザーが物を描くことができるカスタム UIView を持っています。彼らが描いたものが間違っている場合は、背景色を赤にフェードさせてから白に戻したいです。
カスタムUIViewにこのカスタムメソッドが呼び出されました
- (void)indicateMistake;
そのメソッドを呼び出すと、背景色のアニメーションを実行したいので、メソッドにこれがあります:
CABasicAnimation* fade = [CABasicAnimation animationWithKeyPath:@"backgroundColor"];
fade.fromValue = (id)[UIColor whiteColor].CGColor;
fade.toValue = (id)[UIColor redColor].CGColor;
[fade setDuration:3];
[self.layer addAnimation:fade forKey:@"fadeAnimation"];
しかし、私がそれをしても何も起こらないようです。
それで、私はばかげた回転アニメーションを試して、それが機能するかどうかを確認しました:
CABasicAnimation* rotate = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
rotate.toValue = [NSNumber numberWithInt:M_PI];
[rotate setDuration:1];
[self.layer addAnimation:rotate forKey:@"rotateAnimation"];
何らかの理由で機能し、カスタム UIView が回転します。
次に、StackOverflowの回答をさらに読んで、これを試しました:
[UIView animateWithDuration:3 animations:^{
[self setBackgroundColor: [UIColor redColor]];
} completion:^(BOOL finished) {
[self setBackgroundColor: [UIColor whiteColor]];
}];
これにより、色が赤からすぐに白に戻ります。速すぎて見えない時もある。コメントアウトすると、[self setBackgroundColor: [UIColor whiteColor]];
赤のままになります。しかし、白から赤への段階的なノードの効果があります。
私はアイデアを使い果たしました..どんな助けもいただければ幸いです!