Я нарисовал изображение ранее (по основной теме, синхронно), он работает хорошо. Ниже то, что я обнаженКак использовать GCD для рисования изображения?
Но теперь, я хотел бы использовать ГКД, чтобы перерисовать его для повышения производительности. Но я получил изображение, как показано ниже, после я перехожу код, чтобы использовать НОД:
Почему серый круг идет косо?
Это последний код (асинхронно):
let queue3 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
print("frame: \(self.frame)")
self.attachSunMoon()
self.attachClock(rect)
dispatch_async(queue3, {
self.buildCircle(circleRadius: self.radius)
})
Раньше код (синхронно, это хорошо работает, но не то, что я хочу, я предпочитаю использовать НОД) :
print("frame: \(self.frame)")
self.attachSunMoon()
self.attachClock(rect)
self.buildCircle(circleRadius: self.radius)
Наконец, buildCircle
Функция:
/// Draw the big circle
private func buildCircle(circleRadius radius: CGFloat) {
UIGraphicsPushContext(self.ccontext!)
defer { UIGraphicsPopContext() }
print("frame: \(self.frame)")
// Drawing code
let center = CGPoint(x: self.frame.width/2, y: self.frame.height/2)
self.centerPoint = center
//let radius = max(rect.width, rect.height) - 40
let startAngle: CGFloat = 0
let endAngle: CGFloat = 2*π
let path = UIBezierPath(arcCenter: center, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: true)
path.lineWidth = self.arcWidth
clockBorderColor.setStroke()
path.stroke()
}
Благодарим Вас за помощь! :)
Да, вы правы, я уже исправил эту проблему с помощью содержимого чертежа в фоновом потоке, и когда операция рисования завершена, я покажу изображение в пользовательском интерфейсе в основном потоке. –