【问题标题】:Shadow on UIImageView issue [duplicate]UIImageView 问题上的阴影 [重复]
【发布时间】:2017-07-19 10:53:36
【问题描述】:

我正在尝试设置 cornerRadiusUIImageVIew 的影子,它位于 UICollectionViewCell 的内部。问题是我设置了clipToBounds = true 并停止了阴影和cornerRadius

我想要cornerRadius、clipToBounds 和图像的阴影。不知道我在这里做错了什么。

class PostPhotoCell: UICollectionViewCell {

@IBOutlet weak var selectedImage: UIImageView!
@IBOutlet weak var deleteButton: UIButton!


    override func awakeFromNib()
    {
    super.awakeFromNib()

    selectedImage.layer.cornerRadius = 5.0
    selectedImage.contentMode = .scaleAspectFill
    //applying overall shadow to image
    selectedImage.layer.shadowColor = UIColor(white: 0.0, alpha: 0.5).cgColor
    selectedImage.layer.shadowOffset = CGSize(width: 0, height: 0)
    selectedImage.layer.shadowOpacity = 1.0
    selectedImage.layer.shadowRadius = 6.0
    selectedImage.clipsToBounds = true
    }
}

【问题讨论】:

    标签: ios swift uiimageview uicollectionviewcell


    【解决方案1】:

    您需要有一个UIView 作为影子容器,并将您的UIImageView 添加到其中。以下是您需要使阴影和圆角半径与UIImageView 一起使用的示例。

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
    
        let shadowView = UIView(frame: CGRect(x: 100, y: 100, width: 128, height: 128))
        shadowView.clipsToBounds = false
        shadowView.layer.shadowColor = UIColor(white: 0.0, alpha: 0.5).cgColor
        shadowView.layer.shadowOpacity = 1.0
        shadowView.layer.shadowOffset = CGSize.zero
        shadowView.layer.shadowRadius = 6.0
        shadowView.layer.shadowPath = UIBezierPath(roundedRect: shadowView.bounds, cornerRadius: 6.0).cgPath
        view.addSubview(shadowView)
    
        let imageView = UIImageView()
        imageView.image = UIImage(named: "YOUR_IMAGE_NAME")
        imageView.frame = shadowView.bounds
        imageView.clipsToBounds = true
        imageView.layer.cornerRadius = 5
        shadowView.addSubview(imageView)
    }
    

    【讨论】:

    • 我得到了cornerRadius,但没有阴影。我尝试了selectedImage.layoutIfNeeded()self.layoutIfNeeded(),但仍然没有。只是拐角半径
    • 请用我修改后的答案再试一次。这次我设置了masksToBounds = false
    • 我试过了。但它不起作用。我得到了阴影,但没有得到cornerRadius。但是根据我的阅读,您不能在同一个图像视图上设置cornerRadius 和 shadow。比这更复杂
    • 我更新了我的答案。它已经过测试。
    【解决方案2】:

    尝试: selectedImage.layer.masksToBounds = true

    检查 aspectMode 并检查剪辑子视图。

    【讨论】:

    • 试过了,不行
    【解决方案3】:

    如果您在 imageview 上同时给出角半径和阴影,则不起作用。尝试在视图内使用 imageview,然后在视图上给出角半径并在 imageview 上给出阴影

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2013-04-25
      • 1970-01-01
      • 1970-01-01
      • 2018-09-18
      • 2016-01-04
      相关资源
      最近更新 更多