Я хочу нарисовать 2d массив на iOS в скором времени. 2d массив похож на тепловая карта , карта глубины или карта сегментации , и т. Д. c.
В моем случае с UIKit
framework, рисующий массив большого размера, например 500x500
shape, слишком медленный.
// my solution, but it's too slow
override func draw(_ rect: CGRect) {
guard let ctx = UIGraphicsGetCurrentContext(),
let heatmap = self.heatmap else { return }
ctx.clear(rect);
let size = self.bounds.size
let heatmap_w = heatmap.count
let heatmap_h = heatmap.first?.count ?? 0
let w = size.width / CGFloat(heatmap_w)
let h = size.height / CGFloat(heatmap_h)
for j in 0..<heatmap_w {
for i in 0..<heatmap_h {
let value = heatmap[i][j]
let alpha: CGFloat = CGFloat(value)
guard alpha > 0 else { continue; }
let rect: CGRect = CGRect(x: CGFloat(i) * w, y: CGFloat(j) * h, width: w, height: h)
let color: UIColor = UIColor(red: 1.0, green: 0.0, blue: 0.0, alpha: alpha*0.58)
let bpath: UIBezierPath = UIBezierPath(rect: rect)
color.set()
bpath.stroke()
bpath.fill()
}
}
} // end of draw(rect:)
Я думаю, Metal
или CoreGraphics
framework связаны с этой проблемой, но я не смог найти правильный пример или материал. Есть ли рекомендуемые способы?
пример тепловой карты