UISlider игнорирует альфа при установке на 0,5

Почему представление UISlider игнорирует альфа-представление при установке на 0,5?

код:

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];
}

Результат:

Example screenshot

Ползунки имеют значения альфа 0,4, 0,5 и 0,6. И как вы можете видеть, средний с 0.5 полностью непрозрачен. Это происходит только при альфа-0,5. Были протестированы другие контроллеры пользовательского интерфейса, и они работают так, как ожидалось, с альфой установлено на 0,5.

Воспроизводится с iOS 4.2 на реальном устройстве и с iOS 3.2 и 4.2 в симуляторе.

Кстати, если кому-то интересно, как и почему я ударил эту проблему, это скользящая конфигурация площадки для головоломки, названная Slippy.

Ответ 1

Как вы сказали, другие контроллеры пользовательского интерфейса работают с 0,5 альфа, не должно быть разницы с UISlider, поскольку они наследуют alpha свойство from UIView и ссылается на свойство opaque ( "Вы должны всегда устанавливать значение этого свойства как НЕТ, если вид полностью или частично прозрачен" ). Возможно, вы можете попытаться следовать советам.

Если на самом деле есть ошибка с 0,5 значением, вы можете просто изменить начальную прозрачность от 0,4 до 0,41/0,39 без видимой разницы:

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

Наконец, вы можете вывести полученные значения alpha на некоторые метки, чтобы проверить, являются ли они ожидаемыми, или вывести значение (CGFloat)i, чтобы увидеть, что что-то не так с литьем типов.