Оптимизация CAShapeLayer
На экране около 1000 кругов одинакового размера в трех цветах и в текущем варианте проекта они все рисуются с нуля по координатам. Вот как выглядит отрисовка одного круга сейчас:
func drawCircle(xCoordinate: Double, yCoordinate: Double){
let circle = CAShapeLayer()
circle.position = CGPoint(x: xPosition, y: yPosition)
circle.path = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: 5, height: 5), cornerRadius: 3).cgPath
if year < roundedAge + 2 {
circle.fillColor = UIColor(red: 155/255, green: 155/255, blue: 155/255, alpha: 1.0).cgColor
circle.opacity = 1.0
} else if year == roundedAge + 2 && week < currentWeekInUserYear {
circle.fillColor = UIColor(red: 206/255, green: 157/255, blue: 0, alpha: 1.0).cgColor
} else if year == roundedAge + 2 && week == currentWeekInUserYear {
circle.fillColor = UIColor(red: 206/255, green: 157/255, blue: 0, alpha: 1.0).cgColor
if shouldCreateCurrentLabel {
drawCurrentYear(age: roundedAge + 1, labelYPosition: shouldGap ? yPosition + 10 : yPosition, view: currentView)
} else {
currentAgeGroup.textColor = .yellow
}
} else {
circle.fillColor = UIColor(red: 155/255, green: 155/255, blue: 155/255, alpha: 1.0).cgColor
circle.opacity = 0.2
}
currentView.layer.addSublayer(circle)
}
}
На слабых устройствах это вызывает торможение отрисовки. Думал в сторону SF Symbols, но этот вариант не подходит, так как мин. версия iOS у приложения - 12.4. Логически прихожу к тому, что круги можно переиспользовать, меняя только цвет и координаты, но не могу понять как это реализовать.