         self.delegate?.draw?()
 
         #if os(iOS)
-            let drawnImage = UIGraphicsGetImageFromCurrentImageContext()
-            self.image = drawnImage
-            UIGraphicsEndImageContext()
+        let drawnImage = UIGraphicsGetImageFromCurrentImageContext()
+        self.image = drawnImage
+        UIGraphicsEndImageContext()
         #else
-            guard let cgImage = NSGraphicsContext.current()?.cgContext.makeImage() else { return }
-            self.image = NSImage(cgImage: cgImage, size: self.frame.size)
-            //self.image?.unlockFocus()
+        if let cgImage = NSGraphicsContext.current()?.cgContext.makeImage() {
+            DispatchQueue.main.async {
+                self.image = NSImage(cgImage: cgImage, size: self.frame.size)
+                self.setNeedsDisplay()
+            }
+        }
         #endif
 
         if self.delegate?.draw == nil {

    private func configuration() {
        #if os(iOS)
        self.isUserInteractionEnabled = true
        #endif
        self.delegate = self
    }

    // MARK: - Override Methods
    open override func draw(_ rect: CGRect) {
        #if os(iOS)
        UIGraphicsBeginImageContext(rect.size)
        self.image?.draw(at: CGPoint(x: 0, y: 0))
        #else
        self.image?.draw(at: NSZeroPoint, from: NSZeroRect, operation: .copy, fraction: 1.0)
        #endif

        // Setup
