ios - 当 iOS 7 中显示工作表/警报时,如何在自定义绘制的控件上将 tintColor 设置为灰色动画?

标签 ios iphone ios7 uikit core-animation

在 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/

相关文章:

iphone - UIImagePickerControllercameraViewTransform 在 iOS 4 中的行为有所不同

iphone - 更改版本号并在 Xcode 5 中构建

core-graphics - 在 Spritekit 中用两种颜色绘制矩形/圆形和三角形。 . .

ios - 使用 `accessibilityLabel` 和 `accessibilityHint` 在 iOS 中正确实现 VoiceOver 辅助功能

ios - 如何使用嵌套的 NSDate 属性将 Realm 对象转换为 JSON?

ios - 核心数据迁移很慢,虽然没有什么可迁移的

ios - 使用 UISearchDisplayController 如何在输入后延迟 3 秒进行搜索

iPhone:MPMusicPlayerController 停止 AVAudioPlayer

iphone - 如何修复 Xcode Organizer 在 "Installing team provisioning profile"处挂起的问题?

ios - 由于方法已弃用而导致 iOS 7 中的性能问题