touchupinside で 1 つのビューを別のビューに遷移させるターゲット アクションを起動する UIButton があります。
これが発生すると、ボタンの状態も選択済みに変更されますが、選択された状態の (異なる) 背景画像は、UIView 遷移が完了するまで実際には描画されません (または、UIView 遷移で遷移するように見える場合もあります)。
ビューの遷移を開始する前に、ボタンに新しい背景画像を強制的に再描画させるにはどうすればよいですか?
UIControlEventTouchUpInside で実行されるコード:
RhSubTab *activeTab;
for(RhSubTab *tab in self.tabViews.copy) {
tab.selected = NO;
[self.view bringSubviewToFront:tab];
if(tab.tag == type) activeTab = tab;
}
[self.view bringSubviewToFront:activeTab];
[activeTab setSelected:YES];
UIView *oldView;
UIView *newView;
for(UIView *view in self.contentViews.copy) {
if([self.view.subviews containsObject:view]) {
oldView = view;
}
if(view.tag == type) {
newView = view;
}
}
if(!oldView) [self.view addSubview:newView];
else [UIView transitionFromView:oldView toView:newView duration:0.5 options:(UIViewAnimationOptionTransitionCrossDissolve|UIViewAnimationCurveEaseInOut) completion:nil];
カスタム (RhSubTab) ボタン クラス:
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if(self) {
[self setBackgroundImage:[[UIImage imageNamed:@"SubContentTabBg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 9, 0, 40)] forState:UIControlStateNormal];
[self setBackgroundImage:[[UIImage imageNamed:@"SubContentTabBg-selected.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 9, 0, 40)] forState:UIControlStateSelected];
}
return self;
}