Добавление маски слоя на CollectionViewCell - PullRequest
0 голосов
/ 19 апреля 2020

Что я пытаюсь сделать:

Применить маску к UIView, используя [UIView] в UICollectionViewCell.

Проблема I ' m, имеющий:

Ячейки, которые не отображаются в начальном состоянии UICollectionView, не применяют маску и, следовательно, показывают пустую ячейку.

cells that apply the mask correctly and some cells that don't

Зеленые ячейки видны, когда загружается представление коллекции, красные ячейки не видны (за пределами экрана). Вы не видите красные клетки, пока не прокрутите вниз. После того, как вы пройдете по эритроцитам при прокрутке вниз и вернетесь к эритроцитам, маска будет применена.

Код, который я использую для установки маски

 [![what I'd like to see][1]][1]   /**
 Apply given views as masks

 - Parameter views: Views to apply as mask.

 ## Note: The view calling this function must have all the views in the given array as subviews.
 */
func setMaskingViews(_ views:[UIView], with maskLayer: CAShapeLayer = CAShapeLayer()){
    maskLayer.name = "animatedGradientLayer"

    /* Remove any excess layers */
    layer.sublayers?.removeAll(where: { layer -> Bool in
        layer.name == "animatedGradientLayer"
    })

    let mutablePath = CGMutablePath()

    /* Append path for each subview */
    views.forEach { (view) in
        guard self.subviews.contains(view) else{
            fatalError("View:\(view) is not a subView of \(self). Therefore, it cannot be a masking view.")
        }

        view.alpha = 0

        /* Check if ellipse */
        if view.layer.cornerRadius == view.frame.size.height / 2, view.layer.masksToBounds{
            /* Ellipse */
            mutablePath.addEllipse(in: view.frame)
        }else{
            /* Rect */
            mutablePath.addRect(view.frame)
        }
    }

    /* Create layer */
    maskLayer.path = mutablePath

    /* Apply layer as a mask */
    self.layer.mask = maskLayer
}

Этот метод вызывается в layoutSubviews () в моем CollectionViewCell. Я также вызываю этот метод из collectionView (cellForItemAt :), который заставляет его работать частично. Маска отображается только после повторного использования ячейки (т. Е. Ячейка находится за пределами первоначального вида, я прокручиваю ее вниз и пересекаю ячейку, чтобы она исчезла из виду, затем прокручиваю назад вверх, чтобы ячейка становится видимой).

Просто добавлю, я не использую раскадровки.

...