pt — points, unidad lógica de medida en iOS y macOS que abstrae la interfaz de la resolución física de la pantalla. Un point corresponde a un píxel en una pantalla sin Retina (@1x) y a dos o tres píxeles en Retina (@2x, @3x). Este artículo explica el principio de funcionamiento de pt, el escalado en diferentes pantallas y el uso de CGPoint y UIFont.pointSize.
Puntos clave
pt (point) — unidad lógica de medida en iOS que permite al desarrollador describir la interfaz en coordenadas abstractas, independientes de la resolución física de la pantalla. Apple introdujo el concepto de points con el lanzamiento del iPhone 4 y la pantalla Retina en 2010. Antes de Retina, los desarrolladores usaban píxeles directamente — un píxel de UI equivalía a un píxel físico.
El sistema de coordenadas de iOS se basa en puntos: el punto (0,0) está en la esquina superior izquierda de la pantalla, el eje X va hacia la derecha, el eje Y hacia abajo. El tamaño de pantalla en puntos permanece constante para cada clase de dispositivo: iPhone SE — 375×667 pt, iPhone 15 Pro — 393×852 pt, iPad — 768×1024 pt (vertical), 1024×768 pt (horizontal). La resolución física puede ser 1179×2556 px (iPhone 15 Pro) — pero el desarrollador trabaja con puntos.
Según las Apple Human Interface Guidelines, los puntos son la abstracción fundamental de UIKit. Todos los frameworks — UIKit, SwiftUI, Core Graphics, SpriteKit — operan en puntos. La conversión a píxeles ocurre automáticamente durante el renderizado a través de UIScreen.nativeScale.
El factor de escala determina cuántos píxeles físicos corresponden a un punto lógico. Apple usa tres niveles: @1x — 1 pt = 1 px (iPad mini sin Retina, modelos antiguos), @2x — 1 pt = 2 px (la mayoría de iPhones anteriores a 2020, iPad Retina), @3x — 1 pt = 3 px (iPhone X y posteriores, incluido iPhone 15 Pro).
| Dispositivo | Tamaño en pt | Tamaño en px | Escala |
|---|---|---|---|
| iPhone SE (3.ª gen.) | 375 × 667 | 750 × 1334 | @2x |
| iPhone 14 | 390 × 844 | 1170 × 2532 | @3x |
| iPhone 15 Pro Max | 430 × 932 | 1290 × 2796 | @3x |
| iPad Pro 12.9" | 1024 × 1366 | 2048 × 2732 | @2x |
| iPad mini (6.ª gen.) | 744 × 1133 | 1488 × 2266 | @2x |
El factor de escala está disponible a través de UIScreen.main.scale (para UIKit) y @Environment(\.displayScale) (para SwiftUI). Se usa al cargar assets: el sistema selecciona automáticamente la imagen con el sufijo @2x o @3x de Assets.xcassets. El desarrollador no debe cargar imágenes @1x en dispositivos Retina — esto reduce el rendimiento y la calidad.
La estructura CGPoint es el tipo básico para representar coordenadas en iOS y macOS. Contiene dos campos: x (CGFloat) e y (CGFloat), los valores se especifican en puntos. CGPoint se usa en todos los frameworks de Apple: UIKit (frame.origin), Core Graphics (CGContext), SpriteKit (SKNode.position), Core Animation (CALayer.position).
// CGPoint — trabajo con coordenadas en puntos
import UIKit
// Creación de un punto
let point = CGPoint(x: 100.0, y: 200.0)
print("Coordenadas: \(point.x), \(point.y)")
// Operaciones matemáticas
let offset = CGPoint(x: 16.0, y: 8.0)
let translated = CGPoint(
x: point.x + offset.x,
y: point.y + offset.y
)
// Distancia entre puntos
func distance(from a: CGPoint, to b: CGPoint) -> CGFloat {
let dx = b.x - a.x
let dy = b.y - a.y
return sqrt(dx * dx + dy * dy)
}
// Conversión de puntos a píxeles
extension CGPoint {
func toPixels(scale: CGFloat) -> CGPoint {
CGPoint(x: x * scale, y: y * scale)
}
}El método toPixels del ejemplo demuestra la conversión de puntos a píxeles físicos mediante UIScreen.main.scale. En UIKit esta conversión ocurre automáticamente durante el renderizado, pero en Core Graphics y al trabajar con Metal, el desarrollador puede necesitar una conversión explícita a píxeles. Todos los cálculos de animaciones, detección de colisiones y layout se realizan en puntos.
La propiedad UIFont.pointSize devuelve el tamaño de fuente en puntos — es la unidad estándar de tipografía en iOS, heredada de la imprenta (1 pt = 1/72 pulgada). Apple usa pt para fuentes desde las primeras versiones de Mac OS. En iOS, el tamaño de fuente se especifica en puntos mediante UIFont.systemFont(ofSize:) o mediante SwiftUI Font.system(size:).
// Trabajo con UIFont.pointSize en Swift
import UIKit
// Creación de una fuente con tamaño en pt
let titleFont = UIFont.systemFont(ofSize: 28.0, weight: .bold)
let bodyFont = UIFont.systemFont(ofSize: 17.0)
let captionFont = UIFont.systemFont(ofSize: 12.0)
// Lectura de pointSize
print("Tamaño del título: \(titleFont.pointSize) pt")
// Dynamic Type — escalado automático
let scaledFont = UIFontMetrics.default.scaledFont(for: bodyFont)
print("Escalado: \(scaledFont.pointSize) pt")
// Comparación de tamaños de fuente
func font(from size: CGFloat, weight: UIFont.Weight) -> UIFont {
UIFont.systemFont(ofSize: size, weight: weight)
}UIFontMetrics es un mecanismo de escalado dinámico de fuentes añadido en iOS 11. Ajusta automáticamente el pointSize según la configuración de accesibilidad del usuario (Settings > Display & Brightness > Text Size). Sin UIFontMetrics, las fuentes no se escalan, lo que incumple los requisitos de accesibilidad WCAG.
La diferencia entre pt y px es crítica para entender el desarrollo en iOS. pt es una unidad lógica, px es una unidad física. Un punto puede corresponder a 1, 2 o 3 píxeles según el factor de escala. El desarrollador opera en puntos, el sistema los convierte a píxeles en la etapa de rasterización.
| Característica | pt | px |
|---|---|---|
| Tipo de unidad | Lógica (independiente del dispositivo) | Física (píxel de hardware) |
| Depende de la resolución | No | Sí |
| Dónde se usa | UIKit, SwiftUI, Core Graphics, layout | Imágenes, Metal, raw buffer |
| Conversión | 1 pt = scale × px (escala de 1 a 3) | 1 px = pt / scale |
| Ejemplo (iPhone 15 Pro) | 393 × 852 pt | 1179 × 2556 px |
Conclusión clave: el tamaño de la interfaz en puntos es el mismo en todos los dispositivos de la misma clase. Una pantalla de 375 pt de ancho — esto aplica tanto al iPhone SE como al iPhone 14 (modelo base). La única diferencia es cuántos píxeles físicos caben en esos 375 pt. Esto garantiza una UI uniforme sin adaptación manual para cada dispositivo.
En SwiftUI, el desarrollador no opera explícitamente con puntos — todos los tamaños se especifican mediante Dp (points independientes del dispositivo, equivalente a pt). SwiftUI aplica automáticamente el factor de escala durante el renderizado, pero proporciona acceso a él a través del valor de entorno displayScale.
// SwiftUI — trabajo con puntos y factor de escala
import SwiftUI
struct ContentView: View {
@Environment(\.displayScale) private var displayScale
var body: some View {
VStack(spacing: 16) {
Text("Título")
.font(.system(size: 28, weight: .bold))
Text("Texto de ejemplo del cuerpo")
.font(.body)
HStack {
Text("Factor de escala:")
.font(.caption)
Text("\(displayScale, specifier: "%.1f")")
.font(.caption.weight(.bold))
}
}
.padding(20)
.frame(width: 300)
}
}SwiftUI abstrae pt a nivel de framework. .font(.body) usa automáticamente Dynamic Type — el tamaño de fuente se ajusta a la configuración del usuario. SwiftUI no permite especificar el tamaño de fuente en píxeles — solo a través de Font y el sistema tipográfico. Esto garantiza la accesibilidad de la interfaz sin esfuerzo adicional del desarrollador.
Preguntas frecuentes
pt — punto lógico de iOS, independiente de la resolución de pantalla. px — píxel físico de la pantalla. Un punto en iPhone 15 Pro equivale a tres píxeles (@3x), en iPad Pro — a dos (@2x). El desarrollador siempre opera en puntos.
En UIKit: UIScreen.main.scale. En SwiftUI: @Environment(\.displayScale). Valores típicos: 1.0 (@1x), 2.0 (@2x), 3.0 (@3x). En iPhone 15 Pro Max el valor es 3.0.
Apple recomienda 17 pt para el texto principal (UIFontTextStyle.body). Para títulos — 28–34 pt. Para leyendas — 12–13 pt. Los estilos Dynamic Type se escalan automáticamente según la configuración de accesibilidad del usuario.
Dynamic Type — sistema de escalado automático de fuentes de iOS presentado en iOS 7. Permite que el texto se adapte a la configuración del tamaño de fuente del sistema (Text Size) y a los parámetros de accesibilidad (Bold Text, Larger Text). Se implementa mediante UIFontMetrics o los estilos de SwiftUI Font.
No. Los dispositivos Apple modernos usan pantallas Retina con @2x o @3x. Las imágenes @1x solo son necesarias para compatibilidad con iPads sin Retina (iPad 2, iPad mini 1.ª gen.). Desde iOS 13, todos los dispositivos soportan al menos @2x.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también