如何在单元格中的 UIImageView 上添加遮罩 - Swift

How to add mask on UIImageView in Cell - Swift

我有一个 tableView,我试图在单元格中的每个图像上添加黑色蒙版,而不是仅在图像上的整个单元格上。但是我有两个问题;

-它从左边到中间遮盖了半个单元格,每次我滚动它都变得更暗。那么请问我的问题在哪里?

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("cell") as! PlacesTableViewCell

        cell.backgroundImage.sd_setImageWithURL(NSURL(string: place.Image), placeholderImage: nil, options: .HighPriority)
}

class PlacesTableViewCell: UITableViewCell {
    override func layoutSubviews() {
    super.layoutSubviews()
    maskArrangement()
}

func maskArrangement(){
    var maskLayer = CALayer()
    maskLayer.frame = CGRectMake(0, 0, backgroundImage.frame.size.width, backgroundImage.frame.size.height)
    maskLayer.backgroundColor = UIColor(white: 0.0, alpha: 0.5).CGColor
    //backgroundImage.layer.mask = maskLayer
    backgroundImage.layer.addSublayer(maskLayer)
    }
}

每次单元格出队时,您都在向 backgroundImage 添加新的子层。通过这种方式,当你滚动时它会变得更暗(当你将你的单元格出列时)。我想你可以在 awakeFromNib 方法中添加 PlacesTableViewCell class 如果它有一个 .xib 文件。

与此同时,您的图片框架应该是单元格的一半。使用自动布局在您的 PLacesTableViewCell class.

中修复它的框架(例如,设置宽度和高度限制)

按照@Shripada 的方式:

class PlacesTableViewCell: UITableViewCell {
    var maskLayer : CALayer
    override func layoutSubviews() {
    super.layoutSubviews()
    maskArrangement()
}

    func maskArrangement(){
        if maskLayer == nil {
            maskLayer.frame = CGRectMake(0, 0, backgroundImage.frame.size.width, backgroundImage.frame.size.height)
            maskLayer.backgroundColor = UIColor(white: 0.0, alpha: 0.5).CGColor
            //backgroundImage.layer.mask = maskLayer
            backgroundImage.layer.addSublayer(maskLayer)
        }
    }
}

我还没有尝试过这段代码。但你的解决方案可以是这样的。