Пример colorWithAlphaComponent в Swift

Каков правильный синтаксис этой функции в Swift?

Следующее работает нормально и окрашивает фон в фиолетовый цвет:

 self.view.backgroundColor = UIColor.purpleColor()

Когда я связываю функцию colorWithAlphaComponent, представление на мгновение показывает правильную альфа-канал, а затем меняется на непрозрачный фиолетовый, который является относительно темным:

 self.view.backgroundColor = UIColor.purpleColor().colorWithAlphaComponent(0.5)

Это рекомендуемая функция для добавления альфа-значения к UIColor?

Кроме того, почему во всплывающем окне intellisense говорится, что эта функция ожидает UIColor в качестве параметра? Например.,

   self.view.backgroundColor = UIColor.colorWithAlphaComponent(<#UIColor#>)

РЕДАКТИРОВАТЬ: поведение странное. Я устанавливаю цвет фона на контроллере представления, который загружается в модальном режиме. Поскольку модальное окно сдвигается снизу вверх, альфа верна. Когда модальное окно завершает загрузку, цвет фона меняется на непрозрачный ?!

РЕДАКТИРОВАТЬ 2: Проблема заключалась не в коде - как код выше, так и предложение ниже правильно применяли альфа-канал. Проблема в том, как представлены модальные окна - основной вид удаляется. См .:
Прозрачный модальный вид в контроллере навигации


person kmiklas    schedule 20.06.2014    source источник
comment
из любопытства пробовали UIColor(red: 0.5, green: 0, blue: 0.5, alpha: 0.5)?   -  person fqdn    schedule 21.06.2014
comment
Я только что попробовал; такое же поведение, как и при использовании .colorWithAlphaComponent(0.5). См. Редактировать.   -  person kmiklas    schedule 21.06.2014
comment
странно, colorWithAlphaComponent - это метод экземпляра, а не метод класса. Если это определено как метод класса, то в соответствии с функциональностью он должен принимать цвет и плавать в качестве параметров.   -  person Naveen Prasad R    schedule 21.06.2014
comment
Согласен ... странно. Вы тоже это видите?   -  person kmiklas    schedule 21.06.2014
comment
stackoverflow .com / questions / 24336187 /   -  person kmiklas    schedule 21.06.2014


Ответы (6)


Это не странно, ведет себя именно так, как надо. Хотя многие из методов UIColor являются методами класса, все же существует несколько методов экземпляра, и это один из них. Из документацию UIColor.

colorWithAlphaComponent:

Создает и возвращает цветовой объект, который имеет то же цветовое пространство и значения компонентов, что и получатель, но имеет указанный альфа-компонент.

Итак, colorWithAlphaComponent: просто изменяет альфа-значение его получателя. Пример:

let purple = UIColor.purpleColor() // 1.0 alpha
let semi = purple.colorWithAlphaComponent(0.5) // 0.5 alpha

И причина, по которой вы видите автозаполнение для этого метода экземпляра в типе, заключается в том, что Swift позволяет использовать методы экземпляра в качестве методов каррированного типа. В приведенном вами примере colorWithAlphaComponent фактически возвращает функцию, которая принимает CGFloat в качестве входных данных и возвращает UIColor.

let purple = UIColor.purpleColor()
let purpleFunc: (CGFloat -> UIColor) = UIColor.colorWithAlphaComponent(purple)

Итак, если вы хотите, вы можете вызвать метод типа, передаваемый в экземпляр, который вы хотите изменить, а затем вызвать результирующую функцию с альфа-каналом, который вы хотите применить, например.

let purple = UIColor.purpleColor()
let purpleTrans = UIColor.colorWithAlphaComponent(purple)(0.5)

Что касается проблем, которые возникают с контроллером модального представления, вам не следует пытаться изменить альфа-канал представления контроллера модального представления. См. здесь для получения дополнительной информации. Вместо этого вы должны вручную создать представление и добавить его в иерархию представлений вашего существующего контроллера представления (если вам абсолютно необходимо изменить его альфа)

person Mick MacCallum    schedule 20.06.2014
comment
Спасибо. Я пытаюсь сделать фон серым при появлении модального окна. Другими словами, фактическое модальное содержимое занимает на экране всего около 300x200 пикселей. Я хочу, чтобы область за пределами содержимого была серой. Когда пользователь нажимает на него, модальное окно закрывается. - person kmiklas; 21.06.2014
comment
В одном из других ответов (внизу) указан параметр: The easiest way is to use modalPresentationStyle property of navigationController - person kmiklas; 21.06.2014
comment
Обновление Swift 3: больше не colorWithAlphaComponent (_ :). Теперь это просто withAlphaComponent ... так пурпурный.withAlphaComponent (0.5) в примере. - person davidrynn; 26.02.2017
comment
Итак, colorWithAlphaComponent: просто изменяет альфа-значение его получателя Я так не думаю. Он создает копию своего получателя с измененным альфа-значением; альфа самого приемника, я думаю, не изменилась. - person Pang; 26.04.2017
comment
Swift 3: color.withAlphaComponent (0.5) - person ; 19.09.2017

Swift 4.0

self.view.backgroundColor = UIColor.black.withAlphaComponent(0.7)
person Arjun Yadav    schedule 01.06.2017

в Swift 3.0

У меня это работает в xcode 8.2.

yourView.backgroundColor = UIColor.black.withAlphaComponent(0.5)

Это может вам помочь.

person Ashu    schedule 06.06.2017

Попробуйте что-нибудь вроде этого, чтобы установить цвет

 view.backgroundColor = UIColor(red: (64/255.0), green: (54/255.0), blue: (105/255.0), alpha: 1.0)
person Waran-    schedule 11.11.2015

Поскольку UIColor является частью UIKit, в SwiftUI он был заменен на Color. Эквивалентный метод .opacity(_ opacity: Double), например:

Color.purple.opacity(0.5)
person JoGoFo    schedule 13.06.2019

UIColor.black.withAlphaComponent (0.5) .cgColor

person Rapkat Baudunov    schedule 05.11.2020