图像的色调不想改变

时间:2017-04-06 07:34:01

标签: swift swift3 uicollectionview

我正在尝试在选择或取消选择UICollectionView的单元格时设置图像的新颜色。每当我没有设置它的图像的色调颜色它,但我不想有它的默认blue颜色。所以我在做的是:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell函数中,我使用代码对我的图像进行了描述:

 let borderWidth = itemBorder.frame.width
             let borderHeight = itemBorder.frame.height

             myImage = UIImageView(frame: CGRect(x: 0, y: 0, width: borderWidth - 1/4 * borderWidth, height: borderHeight - 1/5 * borderHeight))
             myImage.image = UIImage(named: myCollection[indexPath.row])?.withRenderingMode(.alwaysTemplate)
             myImage.tintColor = UIColor.groupTableViewBackground
             myImage.center = CGPoint(x: tmpCell.bounds.width/2, y: tmpCell.bounds.height/2)
             myImage.contentMode = .scaleAspectFit
             tmpCell.contentView.addSubview(myImage)
在取消选择和取消选择的函数中

等等:

 func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        let currentCell: UICollectionViewCell?
        switch collectionView {
        case myCollectionView:
            print("clicked")
            currentCell = myCollectionView.cellForItem(at: indexPath)!
                currentCell?.tintColor = UIColor.white

        case colorsCollectionView:
           break
        default:
            break
        }
    }

    func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {
        let currentCell: UICollectionViewCell?
        switch collectionView {
        case vehiclesCollectionView:
            print("deselected")
            currentCell = myCollectionView.cellForItem(at: indexPath)!
            currentCell?.tintColor = UIColor.groupTableViewBackground
        case colorsCollectionView:
            break
        default:
            break
        }
    }

有人能告诉我什么错了吗? 提前谢谢!

解决方案

解决方案 每当我想要更新颜色的色调时,我指向不在图像上的单元格,所以基本上只需要将其添加到选定或取消选择的方法中:

currentCell = myCollectionView.cellForItem(at: indexPath)!
            let image = currentCell?.contentView.subviews[1] as! UIImageView
            image.tintColor = UIColor.white

1 个答案:

答案 0 :(得分:1)

我发现您正在设置currentCell?.tintColor,但我想您可能需要设置currentCell?.vehicleImageView.image.tintColor

此外,我发现您的代码有点令人困惑,因为您有vehicleImage(可能应该命名为vehicleImageView)和myImage,这是UIImage正在添加作为contentView的子视图?我认为只能添加UIView的子类作为子视图。

我建议您在自定义myImageView中创建一个名为UICollectionViewCell的商家,您可以在其中设置image.tintColor并更改cell.myImageView.tintColordidSelect {1}}

如果您不从故事板添加它们,您仍然可以创建一个didDeselect的子类,其中包含一个名为UICollectionViewCell的属性。您可以根据vehicleImageView中的要求设置此框架和图像。现在,您将拥有一个可以在cellForRowdidSelectdidDeselect引用的属性。

如果您不想创建具有属性的子类,则基本上必须遍历所有子视图并找到图像视图并在其中设置图像cell.vehicleImageView.image.tintColor。设置tintColor tintColor将不会解决问题。您必须将其设置为UICollectionViewCell

希望有所帮助!