2016-11-07 2 views
0

Sur watchos Je dessine un cercle en utilisant le code suivant:Effet moiré avec des graphiques de base sur watchOS?

// Create a graphics context 
UIGraphicsBeginImageContext(CGSize.init(width: 18.0, height: 18.0)) 
let context = UIGraphicsGetCurrentContext() 

// Draw a circle 
let rect = CGRect.init(x: 1.0, y: 1.0, width: 16.0, height: 16.0) 
let border = UIBezierPath(ovalIn: rect) 
border.lineWidth = 1.0 
UIColor.white.setStroke() 
border.stroke() 

// Convert to UIImage 
let cgimage = context!.makeImage(); 
let uiimage = UIImage(cgImage: cgimage!) 

// End the graphics context 
UIGraphicsEndImageContext() 

Le cercle est dessiné, mais il semble laid, comme s'il y avait un moiré, voir photo, à gauche du texte « XX »:
enter image description here
Il devrait être possible d'éviter ce motif et de dessiner un cercle propre, puisque l'heure est également affichée clairement. Mais comment?

Répondre

1

UIGraphicsBeginImageContext crée un contexte avec une échelle de dessin de 1. En d'autres termes, il s'agit d'un non-Retina.

Essayez de remplacer

UIGraphicsBeginImageContext(CGSize.init(width: 18.0, height: 18.0)) 

avec

UIGraphicsBeginImageContextWithOptions(CGSize.init(width: 18.0, height: 18.0), false, 0) 

Spécification 0 pour l'échelle de l'écran fait défaut à l'échelle de l'écran actuel. Faites-moi savoir si cela ne fonctionne pas. :)

+0

Génial, ça marche. Le diamètre du cercle est maintenant deux fois plus grand, mais ce n'est certainement qu'un problème d'échelle. Merci beaucoup! –