2017-09-27 18 views
15

iOS projemde alt gölge içeren özel bir UIView oluşturdum. Amacım, aynı degradeyi, görünümün arka planında olduğu gibi gölgeye uygulamaktır.UIView Gölge Degrade

Geçerli düz renk gölgelerimin nasıl göründüğüne dair bir örnek aşağıdadır.

Shadow Example Bu

aşağıdaki kodu ile UIView alt sınıfının aracılığıyla yapılır:

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 
} 

ben ikinci degrade katmanını oluşturmak ve gölge onu maskeleme ama hiçbir şans oldu uğraşırken edilmiştir. Lütfen bana doğru yönde gelin!

cevap

4

Standart CALayer gölgesiyle daha fazlasını yapamazsınız. CALayer 'in filtrelerine bir göz atın. CALayer.

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

ikinci CAGradientLayer oluşturma ve örneğin bir GausianBlur filtre uygulamak.

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

Devre Dışı standart katman gölgeler ve alt katmanın olarak bulanık katman ekleyin.

0

Ben @jacek, oluşturmak olduğunu açıklamak Jacek'le olarak yapmak (dürüst olmak gerekirse çok değil)

iyi şeyler size CALayer gölgeler ile yapabileceklerinizin sınırını zorluyoruz doğru olduğuna inanıyoruz Kendi gölgeniz, bir gölge olarak hareket etmek için Gaussian blur'i uygulayan başka bir CAGradientLayer.

Ayrıca, kodunuzu layoutSubviews içine yerleştirmenin en uygun yer olduğuna inanmıyorum. Yapılandırıldıktan sonra, katmanınızın çok fazla değişmesi gerekmeyecek ve bu nedenle düzeniniz çok değiştiğinde çokça çağrılacaktır.

Genellikle, arayüz oluşturucusundan gelen bir görünüm kullanılıyorsa, bu mantığı awakeFromNib'dan özel bir configureBackgroundViews işlevinin içine çağırırdım. Sadece sürükle ve projeye BlurEffect.swift dosya açılır:

0

benim gitRepo https://github.com/Krishnarjun-Banoth/BlurView/tree/master/Shadows

Adım1 mevcut ihtiyaçlarınız için benim kodunu kullanın.

Adım 2: Ardından, görünümlerinizin her biri için ayrı ayrı Görünüm uzantı yöntemlerini kullanın.

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

Not: @Jacek Głazik yanıtından ve FlexMonkey'in eğitiminden ilham alındı.