Оптимизация 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. Логически прихожу к тому, что круги можно переиспользовать, меняя только цвет и координаты, но не могу понять как это реализовать.


Ответы (0 шт):