2017-09-27 33 views
15

Tôi đã tạo UIView tùy chỉnh trong dự án iOS có bóng đổ. Mục tiêu của tôi là áp dụng cùng một độ dốc cho bóng đổ vì nó nằm trên nền của khung nhìn.UIView Shadow Gradient

Dưới đây là ví dụ về cách bóng màu đồng nhất hiện tại của tôi trông như thế nào.

Shadow Example này được thực hiện thông qua một lớp con của UIView với mã dưới đây:

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 
} 

Tôi đã được chơi xung quanh với việc tạo ra một lớp gradient thứ hai và che nó vào bóng nhưng đã không có may mắn. Hãy chỉ cho tôi hướng đi đúng!

Trả lời

4

Tôi nghĩ bạn không thể làm được nhiều hơn với bóng chuẩn CALayer. Hãy xem bộ lọc thuộc tính của CALayer.

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

Tạo thứ hai CAGradientLayer và áp dụng một GausianBlur lọc ví dụ.

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

chuẩn Disable bóng lớp và thêm lớp mờ của bạn như là lớp con.

0

Tôi tin @jacek là đúng, bạn đang đẩy giới hạn của những gì bạn có thể làm với CALayer bóng (mà không phải là nhiều để được trung thực)

Những điều tốt nhất để làm như Jacek giải thích là để tạo ra bóng của riêng bạn, mặc dù khác CAGradientLayer áp dụng Gaussian blur để hoạt động như một cái bóng.

Ngoài ra, tôi không tin rằng việc đặt mã của bạn bên trong layoutSubviews là nơi thích hợp nhất. Sau khi cấu hình lớp của bạn sẽ không cần phải thay đổi nhiều, và do đó nó sẽ được gọi là rất nhiều nếu bố trí của bạn thay đổi rất nhiều.

Thông thường nếu sử dụng chế độ xem đến từ trình tạo giao diện, tôi sẽ gọi logic này từ awakeFromNib bên trong hàm configureBackgroundViews chuyên dụng chẳng hạn.

0

Sử dụng mã của tôi cho yêu cầu của bạn có sẵn trong gitRepo tôi https://github.com/Krishnarjun-Banoth/BlurView/tree/master/Shadows

Bước 1: Chỉ cần kéo và thả BlurEffect.swift tập tin trong dự án của bạn.

Bước 2: Sau đó, chỉ cần sử dụng bên dưới Xem phương pháp tiện ích mở rộng cho từng chế độ xem riêng lẻ của bạn.

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

Lưu ý: Lấy cảm hứng từ câu trả lời @Jacek Głazik và hướng dẫn của FlexMonkey.