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
Мерси. Опитвам се да оцветя фона в сиво, когато се появи модалът. С други думи, действителното модално съдържание заема само около 300x200pt на екрана. Искам зоната извън съдържанието да е сива. Когато потребителят го докосне, той ще затвори модала. - 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