簡體   English   中英

自定義UIImageView類,可在Swift 3中添加陰影並使圖像變圓

[英]Custom UIImageView Class that adds shadow and make image round in Swift 3

我正在嘗試創建一個完成兩件事的自定義UIImageView類,它使圖像視圖變圓並為其添加陰影。

這就是我所擁有的:

RoundImage.swift

class RoundImage: UIImageView {
     override func awakeFromNib() {

      }


      func setImageAndShadow(image: UIImage) {
        self.image = image
        self.superview?.layoutIfNeeded()
        print("Image size \(self.frame.size)")
        self.clipsToBounds = true
        layer.masksToBounds = true
        layer.cornerRadius = self.frame.height / 2
        layer.shadowOffset = CGSize(width: 0, height: 3.0)
        layer.shadowColor = UIColor.black.cgColor
        layer.shadowOpacity = 0.7
        layer.shadowRadius = 4

    }

} 

ViewController.Swift

Class ViewController : UIViewController {
   @IBOutlet weak var userImageView: RoundImage!


   override func viewDidLoad() {
      self.userImageView.setImageAndShadow(image: User.sharedInstance.profileImage!)
   }

}

結果,在應用程序中獲得了圓形圖像,但是其中沒有陰影。

在此先感謝您的幫助。

您看不到陰影,因為它是用cornerRadius裁剪的。 為了使其可見,您應該創建一個帶有UIImageView的UIView,將cornerRadius應用於UIImageView,並將陰影應用於其容器(superview)

Swift 3您可以使用CAShapeLayer:

 func setImageAndShadow(image: UIImage, myView : UIView) {
    self.image = image
    self.superview?.layoutIfNeeded()
    print("Image size \(self.frame.size)")
    self.clipsToBounds = true
    layer.masksToBounds = true
    layer.cornerRadius = self.frame.height / 2

    let Shape = CAShapeLayer()
    let myPath = UIBezierPath(ovalIn: self.frame)

    Shape.shadowPath = myPath.cgPath
    Shape.shadowColor = UIColor.black.cgColor
    Shape.shadowOffset = CGSize(width: 0, height: 3)
    Shape.shadowRadius  = 7
    Shape.shadowOpacity = 0.7


    myView.layer.insertSublayer(Shape, at: 0)

}

並在VC中

let image = UIImage(named: "IMG_4040.jpg")

self.userImageView.setImageAndShadow(image: image!, myView : view)

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM