Прозрачный градиент UIView
Учитывая произвольный UIView на iOS, существует ли способ использования Core Graphics (CAGradientLayer), чтобы применить к нему "передний-прозрачный" градиент?
Я не могу использовать стандартный CAGradientLayer, потому что фон более сложный, чем UIColor. Я также не могу наложить PNG, потому что фон будет меняться по мере прокрутки моего поднабора вдоль его родительского вертикального прокрутки (см. Изображение).
У меня есть неэлементная резервная копия: у меня есть uiview клип в его подзонах и перемещение предварительно рендерированного градиента png фона при прокрутке родительского прокрутки.
![transparent uiview gradient problem]()
Ответы
Ответ 1
Это было смущающе легко исправить: примените CAGradientLayer как мою маску subview.
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = _fileTypeScrollView.bounds;
gradientLayer.colors = [NSArray arrayWithObjects:(id)[UIColor whiteColor].CGColor, (id)[UIColor clearColor].CGColor, nil];
gradientLayer.startPoint = CGPointMake(0.8f, 1.0f);
gradientLayer.endPoint = CGPointMake(1.0f, 1.0f);
_fileTypeScrollView.layer.mask = gradientLayer;
Благодаря Cocoanetics для указания меня в правильном направлении!
Ответ 2
![Gradient Example]()
Я просто столкнулся с той же проблемой и начал писать собственный класс. Это похоже на серьезный перебор, но это был единственный способ найти градиенты с прозрачностью. Вы можете увидеть здесь пример записи и кода
В основном это сводится к пользовательскому UIView, который создает два изображения. Один - сплошной цвет, другой - градиент, который используется как маска изображения. Оттуда я применил результирующее изображение к uiview.layer.content.
Надеюсь, это поможет,
Джо
Ответ 3
Мне очень жаль это говорить, но я думаю, что вы попадаете в землю CUSTOM UIView. Я думаю, что я попытаюсь реализовать это в пользовательском UIView, переопределяя процедуру drawRect.
С этим вы можете иметь этот вид, располагаться поверх своего фактического прокрутки и иметь свой градиентный вид (если хотите) "передать" все события касания (т.е. отказаться от первого ответчика).
Ответ 4
Вот как я это сделаю.
Шаг 1 - определение пользовательского представления градиента
import UIKit
class GradientView: UIView {
override open class var layerClass: AnyClass {
return CAGradientLayer.classForCoder()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
let gradientLayer = self.layer as! CAGradientLayer
gradientLayer.colors = [
UIColor.white.cgColor,
UIColor.init(colorLiteralRed: 1, green: 1, blue: 1, alpha: 0).cgColor
]
backgroundColor = UIColor.clear
}
}
Шаг 2. Перетащите a UIView
в раскадровку и установите свой собственный класс в GradientView
![введите описание изображения здесь]()
В качестве примера показано, как выглядит выше вид градиента:
![введите описание изображения здесь]()
Изменить: для работы прозрачности layer
вам также необходимо установить цвет фона UIView
, чтобы очистить цвет.