Pourquoi les frameworks UIView sont-ils constitués de flotteurs?

Techniquement, les valeurs x, y, width et height représentent un set de dimensions relatives aux pixels. Je ne peux pas avoir 200.23422 pixels alors pourquoi utilisent-ils des flotteurs au lieu des ints?

La raison de ces flottants est que les processeurs et GPU a modernes sont optimisés pour fonctionner avec de nombreux nombres à floating point en parallèle. Ceci est vrai pour iOS ainsi que pour Mac.

Avec Quartz vous n'abordez pas les pixels individuels, mais tout ce que vous dessinez est toujours anti-aliasé. Lorsque vous avez une coordonnée 1.0, 1.0, cela ajoute réellement de la couleur aux pixels 2×2 à l'origine des coordonnées.

C'est pourquoi vous pourriez get des lignes floues si vous dessinez à des coordonnées entières. Sur la non-rétine, vous devez compenser par 0,5. Techniquement, vous devez compenser par 0,25 pour dessiner des pixels précis sur les écrans Retina. Bien que là, cela n'a pas vraiment d'importance parce que vous ne le voyez plus vraiment à cette taille de pixel.

Longue histoire courte: vous n'abordez pas les pixels directement, mais le moteur graphique établit une correspondance entre les coordonnées à floating point et les pixels pour vous.

Résolution d'indépendance.

Vous voulez garder votre représentation mathématique de votre interface user aussi précise que possible, en ne traduisant que des valeurs de pixel int lorsque vous avez réellement besoin de dessiner sur le périphérique de sortie (et même alors, pas vraiment). C'est ainsi que vous pouvez appliquer n'importe quel nombre de transformations à vos vues tout en obtenant un résultat précis.

En outre, il est possible de rendre des lignes, par exemple, à des largeurs de demi-pixel et encore less avec un résultat visible – le système utilise un antialiasing intelligent pour afficher une ligne fine.

C'est le même principe que le dessin vectoriel utilise depuis des décennies (Adobe PostScript, SVG, etc.). En fait Quartz est basé sur PDF, qui est la version moderne de PostScript. NeXT utilisé Afficher PostScript dans son time, puis il a été considéré comme assez révolutionnaire.

Les dimensions sont en fait des points qui sur les écrans non rétiniens ont une relation de 1 à 1 avec les pixels, mais pour les écrans de la rétine, 1 point = 2 pixels. Donc, sur un écran de la rétine, vous pouvez réellement incrémenter d'un demi-point.