2015-09-10 1 views
1

Quand je composite linéaire transparent et gradients radiaux dans iOS en utilisant Quartz le résultat ne semble pas que je pense. La capture d'écran montre la version iOS sur la gauche et un test Java sur la droite. Fait intéressant, si j'utilise Core Graphics sur OS X pour dessiner les dégradés, ils ont l'air bien (comme le Java).Pourquoi ce dégradé composite semble-t-il mauvais sur iOS?

Je me demande si je manque une option de rendu ou le mode de fusion nécessaire pour faire ce travail ou si elle est une limitation de l'iOS.

enter image description here enter image description here Le dessin se fait comme suit:

let linearPaint = CGGradientCreateWithColors(CGColorSpaceCreateDeviceRGB(), 
    [darkColor.CGColor, lightColor.CGColor], [0, 1]) 
CGContextSetAlpha(g, 0.3) 
CGContextDrawLinearGradient(g, linearPaint, CGPointMake(x,y), CGPointMake(x,y+h), CGGradientDrawingOptions(rawValue: 0)) 

let radialPaint = CGGradientCreateWithColors(CGColorSpaceCreateDeviceRGB(), 
    [color.CGColor, lightColorTrans.CGColor], [0, 1]) 
CGContextSetAlpha(g, 0.4) 
CGContextDrawRadialGradient(g, radialPaint, center, 0, center, rad, CGGradientDrawingOptions(rawValue: 0)) 
+0

Avez-vous essayé d'utiliser les options kCGGradientDrawsAfterEndLocation ou kCGGradientDrawsBeforeStartLocation sur votre appel à CGContextDrawRadialGradient –

Répondre

0

Comme Glenn Howes a souligné dans sa réponse kCGGradientDrawsAfterEndLocation semble soit atténuer ou résoudre ce problème. Cependant, je ne suis toujours pas sûr de savoir pourquoi cela devrait être important étant donné que le gradient radial devrait aller à zéro transparence au rayon de fin.