在 iOS 7 中,当出现 UIActionSheet
时,系统控件会将所有的 tintColor
设置为灰色。当工作表被关闭时,它们会动画回来。
我有一些带有自定义背景图像的控件或使用色调颜色的 drawRect
实现,我希望它们像系统控件一样为这种变化设置动画。
Apple 将 - (void)tintColorDidChange
添加到 UIView
,但在此方法中使用新颜色重绘不会使更改具有动画效果——它只是从全色切换到立即全灰,当它周围的其他系统控件正在动画时看起来很糟糕。
如何让我的自定义绘制控件像 Apple 一样为 tintColor
转换设置动画?
最佳答案
您可以通过将 Core Animation 过渡应用于 View 层来做到这一点:
//set up transition
CATransition *transition = [CATransition animation];
transition.type = kCATransitionFade;
transition.duration = 0.4;
[self.layer addAnimation:transition forKey:nil];
//now trigger a redraw of the background using the new colour
//and the transition will cover the redraw with a crossfade
self.flagToIndicateColorShouldChange = YES;
[self setNeedsDisplay];
编辑:动画和重绘之间可能存在竞争条件,具体取决于您进行重绘的方式。如果您可以发布您尝试立即更新的原始重绘代码(没有动画),我可以提供更具体的答案。
关于ios - 当 iOS 7 中显示工作表/警报时,如何在自定义绘制的控件上将 tintColor 设置为灰色动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19798712/