【したいこと】
COllectionViewを使って2列で表示している各セルのUIImageViewにグラデーションを設定したいです
【困っていること】
以下の2つの方法を取っています
- グラデーションを設定するメソッドをCellクラスに書き出してCellForItemAtで呼び出す
- CellクラスのimageViewをlazy var で生成する中でグラデーションを設定する
ですが、1つ目のやり方だと毎回毎回グラデーションが設定されるためかグラデーションが濃くなる
2つ目のやり方だとそもそもグラデーションが表示されない
【コード】
以下それぞれのコードです
1つ目のやり方
これをCellForItemAt
内で呼び出す
func setupGradationLayer() { let gradationLayer = CAGradientLayer() let startColor = UIColor.clear.cgColor let endColor = UIColor.black.cgColor gradationLayer.colors = [startColor, endColor] gradationLayer.startPoint = CGPoint(x: 0.0, y: 0.0) gradationLayer.endPoint = CGPoint(x: 0.0, y: 1.0) gradationLayer.frame = CGRect(x: 0, y: 1, width: imageView.bounds.size.width, height: 100) imageView.layer.addSublayer(gradationLayer) }
2つ目のやり方。
これをaddsubしてコードautolayoutするのを override init(frame: CGRect)
内で行う
lazy var imageView: UIImageView = { let imageView = UIImageView() imageView.contentMode = .scaleAspectFill imageView.layer.cornerRadius = frame.width * 0.05 imageView.clipsToBounds = true let gradationLayer = CAGradientLayer() let startColor = UIColor.clear.cgColor let endColor = UIColor.black.cgColor gradationLayer.colors = [startColor, endColor] gradationLayer.startPoint = CGPoint(x: 0.0, y: 0.0) gradationLayer.endPoint = CGPoint(x: 0.0, y: 1.0) gradationLayer.frame = CGRect(x: 0, y: 0, width: imageView.bounds.size.width, height: imageView.bounds.size.height) imageView.layer.addSublayer(gradationLayer) return imageView }()
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/10 08:19 編集
2019/10/10 09:05
2019/10/12 11:14