如何在Cell - Swift中的UIImageView上添加掩码

时间:2015-09-03 20:47:23

标签: ios swift uiimageview calayer

我有一个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)
    }
}

1 个答案:

答案 0 :(得分:0)

每次单元格出列时,您都会在backgroundImage中添加新的子图层。这样滚动时(当你的单元格出列时)它会变暗。我认为如果PlacesTableViewCell方法有awakeFromNib文件,您可以添加到.xib课程。

同时你的图像帧应该是细胞的一半。使用autolayout修复PLacesTableViewCell类中的框架(例如,设置宽度和高度约束)。

以@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)
        }
    }
}

我还没试过这段代码。但你的解决方案就是这样。