Как добавить тень к самому UIImageView вместо его слоя - PullRequest
0 голосов
/ 14 мая 2018

Я добавляю тень в UIImageView следующим способом:

extension UIImageView {
    public func applyShadow()
        layer.shadowColor = UIColor.gray.cgColor
        layer.shadowOffset = CGSize(width: 0, height: 0)
        layer.shadowOpacity = 0.2
        layer.shadowRadius = 8.0
        layer.masksToBounds = false
    }
}

Я хочу, чтобы режим содержимого был .scaleAspectFit.Однако, когда я устанавливаю это, рамка layer отличается от рамки UIImageView, но я хочу, чтобы тень применялась к кадру UIImageView.Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Решением было установить backgroundColor моего UIImageView на белый. Без набора цветов не было содержимого слева и справа от изображения, поэтому тень на изображении .scaleAspectFit свалилась. При установленном цвете тень применяется к реальному кадру.

0 голосов
/ 14 мая 2018

Вы должны добавить тень к изображению себя, добавив новое изображение с тенью

extension UIImageView {

    func addShadowToImageNotLayer(blurSize: CGFloat = 8.0){

        let shadowColor = UIColor(white:0.0, alpha:0.8).cgColor

        guard let image = self.image else {return}

        let context = CGContext(data: nil,
                                width: Int(image.size.width + blurSize),
                                height: Int(image.size.height + blurSize),
                                bitsPerComponent: image.cgImage!.bitsPerComponent,
                                bytesPerRow: 0,
                                space: CGColorSpaceCreateDeviceRGB(),
                                bitmapInfo: CGImageAlphaInfo.premultipliedLast.rawValue)!

        context.setShadow(offset: CGSize(width: blurSize/2,height: -blurSize/2),
                          blur: blurSize,
                          color: shadowColor)
        context.draw(image.cgImage!,
                     in: CGRect(x: 0, y: blurSize, width: image.size.width, height: image.size.height),
                     byTiling:false)

        self.image = UIImage(cgImage: context.makeImage()!)

    }
}

Используется:

 UIImageView().addShadowToImageNotLayer(blurSize: 20)
...