Я использую этот метод для применения градиентной границы к представлениям. Но когда представление находится в ячейке таблицы, частота кадров прокрутки в представлении таблицы заметно падает. Есть ли способ улучшить производительность? Я попытался установить непрозрачный, drawsAsynchronously и shouldRasterize, чтобы true, поскольку Apple предлагает, но ничего не изменилось.Улучшение производительности градиентной границы с использованием CAShapeLayer и CAGradientLayer
func addBorder(colors:[UIColor]? = nil,size:CGSize? = nil) {
_ = self.sublayers?.filter({$0.name == "GradientBorder"}).map({$0.removeFromSuperlayer()})
let shapeFrame = CGRect(origin: CGPointZero, size: size ?? bounds.size)
let gradientLayer = CAGradientLayer()
gradientLayer.name = "GradientBorder"
gradientLayer.frame = shapeFrame
gradientLayer.startPoint = CGPointMake(0.0, 0.5)
gradientLayer.endPoint = CGPointMake(1.0, 0.5)
gradientLayer.colors = colors == nil ? [UIColor.blueColor().CGColor,UIColor.redColor().CGColor] : colors!.map({$0.CGColor})
gradientLayer.contentsScale = UIScreen.mainScreen().scale
let shapeLayer = CAShapeLayer()
shapeLayer.lineWidth = 2
shapeLayer.path = UIBezierPath(roundedRect: shapeFrame, cornerRadius: self.cornerRadius).CGPath
shapeLayer.fillColor = nil
shapeLayer.strokeColor = UIColor.blackColor().CGColor
gradientLayer.shouldRasterize = true
gradientLayer.opaque = true
gradientLayer.drawsAsynchronously = true
shapeLayer.drawsAsynchronously = true
shapeLayer.opaque = true
gradientLayer.mask = shapeLayer
self.addSublayer(gradientLayer)
}
Когда вы добавляете в эту систему границу? Можете ли вы показать эту часть кода? – TheEye
@IBOutlet слабый var isOnlineViewContainer: UIView! { didSet { isOnlineViewContainer.layer.addBorder() } } –
Ну, я имею в виду всю ситуацию - как часто называется функция addBorder? – TheEye