2017-09-27 50 views
15

Utworzyłem niestandardowy UIView w moim projekcie iOS, który ma cień. Moim celem jest zastosowanie tego samego gradientu do cienia, jaki jest na tle widoku.UIView Shadow Gradient

Poniżej znajduje się przykład tego, jak wyglądają moje obecne cienie stałego koloru.

Shadow Example Odbywa się to poprzez podklasy UIView z poniższym kodzie:

override func layoutSubviews() { 
    let gradientLayer = layer as! CAGradientLayer 
    gradientLayer.colors = [topColor.cgColor, bottomColor.cgColor] 
    gradientLayer.startPoint = CGPoint(x: startPointX, y: startPointY) 
    gradientLayer.endPoint = CGPoint(x: endPointX, y: endPointY) 
    layer.cornerRadius = cornerRadius 
    layer.shadowColor = shadowColor.cgColor 
    layer.shadowOffset = CGSize(width: shadowX, height: shadowY) 
    layer.shadowRadius = shadowBlur 
    layer.shadowOpacity = 1 

    let inset: CGFloat = bounds.width * 0.05 
    layer.shadowPath = UIBezierPath(roundedRect: bounds.insetBy(dx: inset, dy: 0.0), cornerRadius: cornerRadius).cgPath 
} 

I zostały gry z tworząc drugą warstwę gradientu i maskowanie go do cienia, ale nie miał szczęścia. Proszę wskazać mi właściwy kierunek!

Odpowiedz

4

Myślę, że nie można zrobić więcej dzięki standardowemu cieniowi CALayer. Zobacz właściwości filtrów Właściwość CALayer.

https://developer.apple.com/documentation/quartzcore/calayer/1410901-filters

Tworzenie drugą CAGradientLayer i zastosować GausianBlur filtr na przykład.

https://developer.apple.com/library/content/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/CIGaussianBlur

Wyłącz standardowe cienie warstwę i dodać niewyraźne warstwę jako podwarstwy.

0

wierzę @jacek ma rację, jesteś pchanie limit co można zrobić z CALayer cieni (która nie jest dużo, aby być uczciwym)

najlepszych rzeczy do zrobienia, jak wyjaśnia Jacek jest stworzenie własny cień, ale inny efekt rozmycia Gaussa, aby działał jak cień.

Ponadto, nie sądzę, aby umieszczenie kodu wewnątrz layoutSubviews jest najbardziej odpowiednim miejscem. Po skonfigurowaniu twoja warstwa nie będzie musiała się wiele zmieniać, a więc będzie się nazywać dużo, jeśli twój układ bardzo się zmieni.

Zwykle, jeśli używasz widoku pochodzącego z interfejsu-buildera, nazwałbym tę logikę od awakeFromNib w dedykowanej funkcji configureBackgroundViews na przykład.

0

Użyj mojego kodu do wymogu dostępnej w moim gitRepo https://github.com/Krishnarjun-Banoth/BlurView/tree/master/Shadows

Krok 1: Wystarczy przeciągnąć i upuścić BlurEffect.swift plik w projekcie.

Krok 2: Następnie po prostu skorzystaj z poniższych opcji Zobacz metody rozszerzenia dla każdego z Twoich widoków indywidualnie.

testView.applyGradient(colours: [UIColor.blue,UIColor.orange]) //pass your required colours. 
    testView.blur(blurRadius: 5.0) 

Uwaga: Zainspirowano do odpowiedzi @Jacek Głazik i samouczek FlexMonkey.