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#>)
EDIT: поведение странно. Я устанавливаю цвет фона на контроллере представления, который загружается в модальный. По мере того, как модальное изображение соскальзывает снизу, альфа правильна. Когда модальное завершение загрузки, цвет фона меняется на непрозрачный?!
ИЗМЕНИТЬ 2: Проблема не в коде - как приведенный выше код, так и предлагаемое ниже предложение правильно применяли альфа. Проблема заключается в способе представления модалов - устранение основного представления. См:
Прозрачный модальный вид на контроллере навигации
Ответы
Ответ 1
Это не странно, он ведет себя именно так, как и должен. Хотя многие из методов 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)
Итак, если вы хотите, вы можете вызвать метод type, передавая экземпляр, который вы хотите изменить, и затем вызвать результирующую функцию с той альфой, которую вы хотите применить, вот так.
let purple = UIColor.purpleColor()
let purpleTrans = UIColor.colorWithAlphaComponent(purple)(0.5)
Затем, что касается проблем, которые возникают у вас с контроллером модального представления, вам не следует пытаться изменить альфа-представление контроллера модального представления. Смотрите это для получения дополнительной информации. Вместо этого вы должны вручную создать представление и добавить его в иерархию представлений вашего существующего контроллера представления (если вам абсолютно необходимо изменить его альфа)
Ответ 2
Swift 4.0
self.view.backgroundColor = UIColor.black.withAlphaComponent(0.7)
Ответ 3
в Swift 3.0
Это работает для меня в xcode 8.2.
yourView.backgroundColor = UIColor.black.withAlphaComponent(0.5)
Это может помочь вам.
Ответ 4
Попробуйте что-нибудь подобное, чтобы установить цвет
view.backgroundColor = UIColor(red: (64/255.0), green: (54/255.0), blue: (105/255.0), alpha: 1.0)
Ответ 5
Поскольку UIColor
является частью UIKit, он был заменен в SwiftUI на Color
. Эквивалентный метод - .opacity(_ opacity: Double)
например:
Color.purple.opacticy(0.5)