Что такое пиксель (pixel) и как с ним работать в iOS?

«Что такое пиксель (pixel) и как с ним работать в iOS?» — вопрос из категории UIKit, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Пиксель — это наименьший физический элемент дисплея, способный отображать цвет. В iOS-разработке ключевое понятие — это разделение между пикселями (pixels) и точками (points), введённое для поддержки дисплеев с разной плотностью (Retina).

Точки (Points) vs Пиксели (Pixels):

  • Точка (pt) — независимая от устройства единица измерения в системах координат UIKit (фреймы, констрейнты).
  • Масштабный коэффициент (scale) определяет, сколько физических пикселей приходится на одну точку.
    • scale = 1.0 (не-Retina): 1 точка = 1 пиксель.
    • scale = 2.0 (Retina): 1 точка = 2x2 пикселя.
    • scale = 3.0 (Super Retina): 1 точка = 3x3 пикселя.

Практическое использование:

// Получение масштаба экрана
let screenScale = UIScreen.main.scale // Например, 2.0 или 3.0

// Конвертация точек в пиксели
let pointWidth: CGFloat = 100
let pixelWidth = pointWidth * screenScale // Реальная ширина в пикселях

// Создание изображения с учётом плотности пикселей
UIGraphicsBeginImageContextWithOptions(CGSize(width: 100, height: 100), false, screenScale)
// ... рисование ...
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
// image.size будет (100, 100) points, но image.pngData() создаст файл размером 200x200 или 300x300 пикселей.

// Точная отрисовка на 1 физический пиксель
let onePixelLine = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 1.0 / screenScale))

Важно: Все API UIKit (фреймы, констрейнты) работают в точках. Прямая работа с пикселями требуется редко — в основном для кастомной отрисовки графики (Core Graphics) или обработки изображений, где нужно учитывать scale для избежания размытости.