Хорошо, поэтому я немного поиграл с раскадровкой, и мне удалось воссоздать то, что вы хотите.
Результат ![enter image description here](https://i.stack.imgur.com/2zTJ5.png)
Раскадровка ![enter image description here](https://i.stack.imgur.com/jCT6T.png)
И, наконец, код
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var redView: UIView!
@IBOutlet weak var yellowView: UIView!
@IBOutlet weak var blueView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
UIView.animate(withDuration: 0.0) {
UIView.addCornerRadiusToViews(views: [self.redView, self.yellowView,self.blueView], cornerRadius: 50)
self.redView.dropShadow(color: UIColor.black, offSet: CGSize(width: 5.0, height: 5.0))
self.yellowView.dropShadow(color: UIColor.black, offSet: CGSize(width: 5.0, height: 5.0))
self.blueView.dropShadow(color: UIColor.black, offSet: CGSize(width: 5.0, height: 5.0))
self.view.layoutIfNeeded()
}
}
}
extension UIView {
func dropShadow(color: UIColor, opacity: Float = 0.5, offSet: CGSize, radius: CGFloat = 50, scale: Bool = true) {
layer.masksToBounds = false
layer.shadowColor = color.cgColor
layer.shadowOpacity = opacity
layer.shadowOffset = offSet
layer.shadowRadius = radius
layer.shadowPath = UIBezierPath(rect: self.bounds).cgPath
layer.shouldRasterize = true
layer.rasterizationScale = scale ? UIScreen.main.scale : 1
}
static func addCornerRadiusToViews(views: [UIView], cornerRadius: CGFloat) {
views.forEach { (view) in
view.layer.cornerRadius = cornerRadius
view.layer.masksToBounds = true
}
}
}
Вы можете изменить значения roundCorner и значения смещения тени, чтобы получить идеальный пиксель.