Подтвердить что ты не робот

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: Проблема не в коде - как приведенный выше код, так и предлагаемое ниже предложение правильно применяли альфа. Проблема заключается в способе представления модалов - устранение основного представления. См:
Прозрачный модальный вид на контроллере навигации

4b9b3361

Ответ 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)