layoutSubviews では、子ビューを適切な位置にレイアウトし、それらの一部に何らかの変換を適用します。ここで、このサブビューで再現可能なスケール アニメーションを作成して注目を集めたいと思います。しかし、[UIView animate....] でアニメーションを起動すると、transform プロパティを変更して、layoutSubviews メソッドを起動し、アニメーションと競合します (transform をオーバーライドし、アニメーションは再生されません)。
この動作を処理する良い方法 (bool フラグなし) はありますか?
例:
- (void)layoutSubviews {
[super layoutSubviews];
myChildView.transform = CGAffineTransformMake....;
}
- (void)animate {
CGAffineTransform originalTransform = myChildView.transform;
[UIView animateWithDuration:0.1f
delay:0.0f
options:UIViewAnimationOptionAutoreverse
animations:^{
[UIView setAnimationRepeatCount:4];
//next line of code produce calling layoutSubviews
myChildView.transform = CGAffineTransformMakeScale(1.15f, 1.15f);
} completion:^(BOOL finished){
myChildView.transform = originalTransform;
//after this also called layoutSubviews
}];
}