Arrondi des CGFloat et retina

colas_colas_ Membre
janvier 2015 modifié dans Objective-C, Swift, C, C++ #1

Bonjour à  tous !


 


Si j'ai bien compris les choses, sur un écran retina, un pixel peut avoir des coordonnées demi-entières.


 


Est-ce du coup, à  votre avis, ça peut valoir le coup de créer une fonction :


 


En gros, quand c'est du retina, ça va transformer 42.6 en 42.5.


Sinon, ça va transformer 42.6 en 42.



CGFloat floorClever_cbd_(CGFloat aFloat)
{
/*
Semi-entire or entire coordinate
*/
CGFloat factor = 1.0f ;

#if TARGET_OS_IPHONE
factor = [[UIScreen mainScreen] scale] ;
#endif



/*
Flooring
*/
CGFloat result ;

#if CGFLOAT_IS_DOUBLE
if (factor < 1.1)
{
result = floor(aFloat) ;
}
else
{
result = floor(aFloat * factor) / factor ;
}
#else
if (factor < 1.1)
{
result = floorf(aFloat) ;
}
else
{
result = floorf(aFloat * factor) / factor ;
}
#endif

return result ;
}

PS : cette fonction est compatible osx mais ne gère pas les écrans retina osx.


Réponses

  • AliGatorAliGator Membre, Modérateur
    Mouais... pourquoi ne pas laisser le subpixelling faire son travail, t'as peur que ça fasse des effets de flou ?
  • Du coup, tu ne fais pas des floor() quand tu calcules des coordonnées ?


     


    Exemples : mettre une vue au tiers d'une autre ; centrer une vue dans une autre.


  • AliGatorAliGator Membre, Modérateur
    Bah déjà  j'utilise autolayout pour ça, ça évite des tonnes de code et surtout ça met à  jour dynamiquement (rotations, etc) :-P

    Du coup c'est rare que j'utilise des CGFloat et autres CGRect pour positionner des vues à  l'écran. Et les rares fois où je le fais, je ne m'embête pas forcément à  arrondir le subpixelling se débrouille pour faire l'antialiasing tout seul.

    Les rares fois où je fais gaffe au subpixelling c'est plutôt pour quand j'ai de la composition d'images à  faire, par exemple ce que j'ai fait pour mon pod OHPDFImage où il faut " comme tu as vu dans les issues que tu as ouvertes :P " être sûr de correctement aligner l'image, son masque, etc... sans quoi on risque des bordures fines qui dépassent. Mais dans ce cas, c'est du dessin sur un contexte graphique, donc normalement ça ne dépend pas forcément du scale du UIScreen de toute façon car tu dessines pas tes 2 images superposées directement à  l'écran, mais sur une image...
Connectez-vous ou Inscrivez-vous pour répondre.