UIAlertController 半透明 glitch/bug

UIAlertController translucency glitch/bug

当iOS呈现警报时,半透明度是恒定的。当我的应用程序显示一个时,警报一开始是白色的,只有半秒钟,然后它变成半透明的。这是一个小问题,但它看起来很乱,我认为警报应该在任何地方都是一致的。不管怎样,这里是代码:

UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"Invalid Credentials" message:@"Please try again." preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
    [_username becomeFirstResponder];
}];
[alertVC addAction:ok];
[self presentViewController:alertVC animated:YES completion:NULL];

我也对这里的人们的意见感兴趣。这是不是任何人都需要关心的小问题?看起来这就是 UIAlertController 的工作方式(至少当开发人员使用它时)。无论如何,它看起来很乱,我会认为它是一个错误(除非我做错了什么)因为它看起来与 iOS 显示警报时不一样,尽管它应该。

免责声明:这部分是观点,部分是有根据的猜测,部分是经验。

UIAlertController 有两个主要部分:深色背景和消息视图。深色背景似乎是用于弹出窗口的非常标准的深色 grey/black 透明视图。 Message 视图看起来使用的模糊类型与用于 UIToolbarUINavigationController.

的模糊类型相同

用于 UIAlertController 过渡的动画是深色背景上的淡入和消息视图上淡入淡出和收缩的组合。淡入淡出并不难以处理模糊的视图; iOS 通常只使用透明视图和快照到 0.999alpha 以上的模糊视图。不过那个收缩动画……这就是魔法所在。

这不仅仅是调整框架大小,消息视图的内容实际上也会改变大小。

有趣的是,除了调整消息视图的框架大小并让文本以静态大小淡入之外,Apple 的某人还决定对文本大小的变化进行动画处理,使其看起来像降落在屏幕上。

这种标签、按钮和框架大小的变化与模糊中的淡入淡出相结合,为相当简单的视图增加了相当多的复杂性。所以,不是处理每个单独的问题,看起来有人决定使用视图的快照,动画比例变化,然后 "transition" 在初始动画完成后达到所需的外观。

至于为什么直接在OS...狗粮中的消息不是这种情况。

对我来说,同样的问题是由 Info.plist 文件中的标志 "Renders with edge antialiasing" 设置为 YES 引起的。 它曾经被设置为改进模拟器 tableview 渲染,谁知道它会影响设备上的系统警报渲染。