【问题标题】:UISlider ignores alpha when set to 0.5UISlider 设置为 0.5 时忽略 alpha
【发布时间】:2011-06-08 12:07:00
【问题描述】:

为什么 UISlider 视图设置为 0.5 时会忽略 alpha 视图?

代码:

for (int i = 0; i < 3; i++) {
  UISlider *slider = [[[UISlider alloc]
                       initWithFrame:CGRectMake(0, i * 30, 200, 30)]
                      autorelease];
  slider.alpha = 0.4 + (CGFloat)i / 10.0f;
  [window addSubview:slider];
}

结果:

滑块的 alpha 值为 0.4、0.5 和 0.6。正如你所看到的,中间的 0.5 是完全不透明的。它似乎只发生在 alpha 0.5 中。已经测试了其他 UI 控制器,并且在 alpha 设置为 0.5 时它们可以正常工作。

在真实设备上使用 iOS 4.2 以及在模拟器中使用 iOS 3.2 和 4.2 进行复制。

顺便说一句,如果有人好奇我是如何以及为什么遇到这个问题的,那就是一个名为Slippy 的益智游戏的滑动方向垫配置。

【问题讨论】:

  • 我自己花了几分钟玩弄它,它确实看起来/感觉像一个错误。我建议向 Apple 提交错误报告 - developer.apple.com/bugreporter
  • 已经向苹果举报了。当我知道更多时会更新。
  • 尝试不同的起始值:0.41 + ...0.3 + ...。这可能会对究竟是什么错误产生一些洞察(它是第二项,值 0.5,...?)另外,尝试添加 if (i != 1) continue 作为 if 语句的第一行,以查看其他滑块是否正在干扰中间的。关于“干涉”角度还有一件事浮现在脑海中:将它们分开 100 像素而不是 30 像素。
  • 另外,删除autorelease(这可能是一个愚蠢的建议,但由于您现在已经抓住了稻草,这是一个相当容易测试的“稻草”)。
  • 是的,这绝对是UISlider 中的一个错误。

标签: iphone cocoa-touch uikit alpha uislider


【解决方案1】:

正如你所说,其他 UI 控制器使用 0.5 alpha,与 UISlider 应该没有区别,因为它们从 UIView 类继承 alpha property,并且引用了 opaque property(“你应该总是如果视图完全或部分透明,则将此属性的值设置为 NO")。也许你可以尝试听从建议。

如果确实存在 0.5 值的错误,您可以简单地将起始透明度从 0.4 更改为 0.41/0.39,没有任何可见的差异:

slider.alpha = 0.41f + (CGFloat)i / 10.0f;

最后,您可以将生成的alpha 值输出到某些标签以检查它们是否是预期的值,或者输出(CGFloat)i 值以查看类型转换是否有问题。

【讨论】:

  • slider.opaque = NO 也不能接缝工作。我还用 NSLog(@"%f", slider.alpha) 记录了 alpha 值,它打印出 0.4、0.5 和 0.6。在遇到此错误的应用程序中,我只有一个滑块,循环只是为了说明问题。感谢您的建议。
猜你喜欢
  • 2020-09-28
  • 2018-02-01
  • 2021-12-25
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-29
  • 2019-03-27
相关资源
最近更新 更多