UIButton.imageViewでアニメーションをさせていると、タップしてもハイライト効果が得られない・UIControlStateHighlightedの画像が表示されないのであれこれと試してみた。
最終的に TouchDown 時にアニメーションを止めて一旦別画像に差し替えてから、async で元の画像に戻すという暴挙にでることで対応。
もう少しスマートな対応方法はないものだろうか…。
- (IBAction)buttonTouchDown:(id)sender {
// アニメーションしているボタンはハイライト効果が得られないため、
// アニメーションを止めて画像を一旦差し替えて再描画を行うようにする。
if ([self.button.imageView isAnimating]) {
[self.button.imageView stopAnimating];
// set other image
__block UIImage *originalImage = [self.button imageForState:UIControlStateNormal];
UIImage *otherImage = [UIImage imageNamed:@"other"];
[self.button setImage:otherImage forState:UIControlStateNormal];
dispatch_async(dispatch_get_main_queue(), ^(void) {
// set original image
[self.button setImage:originalImage forState:UIControlStateNormal];
});
}
}