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

Прозрачный градиент UIView

Учитывая произвольный UIView на iOS, существует ли способ использования Core Graphics (CAGradientLayer), чтобы применить к нему "передний-прозрачный" градиент?

Я не могу использовать стандартный CAGradientLayer, потому что фон более сложный, чем UIColor. Я также не могу наложить PNG, потому что фон будет меняться по мере прокрутки моего поднабора вдоль его родительского вертикального прокрутки (см. Изображение).

У меня есть неэлементная резервная копия: у меня есть uiview клип в его подзонах и перемещение предварительно рендерированного градиента png фона при прокрутке родительского прокрутки.

transparent uiview gradient problem

4b9b3361

Ответ 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, чтобы очистить цвет.