У меня есть пользовательская ячейка представления коллекции, которая добавляет пунктирную границу к слою со следующим кодом:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = appDealCollectionView.dequeueReusableCell(withReuseIdentifier: "appDealCollectionCell", for: indexPath) as! AppDealCollectionViewCell
if let codes = discountCodes {
cell.discountCodeTitle.text = codes[indexPath.row].codeMessageOne
cell.discountCode.text = codes[indexPath.row].code
let yourViewBorder = CAShapeLayer()
yourViewBorder.strokeColor = UIColor.black.cgColor
yourViewBorder.lineWidth = 2
yourViewBorder.lineDashPattern = [10, 10]
yourViewBorder.frame = cell.bounds
yourViewBorder.fillColor = nil
yourViewBorder.path = UIBezierPath(roundedRect: cell.bounds, cornerRadius: 6).cgPath
cell.layer.addSublayer(yourViewBorder)
}
return cell
}
Этот код прекрасно работает при начальной загрузке представления. Однако при изменении ориентации размер ячейки изменяется. Приведенный выше код правильно рисует новую границу CAShapeLayer, но ранее нарисованный граничный слой все еще присутствует, который был нарисован на основе старого размера.
В результате одновременно появляются два разных пограничных слоя, перекрывающих друг друга с разными размерами.
Как сделать недействительными любые ранее нарисованные CAShapeLayers? Где делается аннулирование? В cellForItemAt? Или, возможно, внутри самого "AppDealCollectionViewCell"?