← Назад к вопросам

Что такое pixel?

1.0 Junior🔥 103 комментариев
#UIKit и верстка

Комментарии (3)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое пиксель в контексте iOS-разработки?

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

Физические vs. Логические пиксели

В iOS существуют два ключевых понятия:

  1. Физические пиксели (Physical Pixels / Device Pixels)
    Это реальные светящиеся точки на экране устройства. Их количество фиксировано и определяет нативное разрешение устройства. Например, iPhone 15 Pro Max имеет 2796×1290 физических пикселей.

  2. Логические пиксели (Logical Pixels / Points)
    Это абстрактные единицы измерения, используемые в UIKit (имеют тип CGFloat). Один логический пиксель (point) может содержать несколько физических пикселей. Коэффициент масштабирования между ними называется scale factor (UIScreen.main.scale).

// Пример получения информации о пикселях
let screen = UIScreen.main
let boundsInPoints = screen.bounds // Размер в points (логических пикселях)
let nativeBounds = screen.nativeBounds // Размер в физических пикселях
let scale = screen.scale // Коэффициент масштабирования (например, 2.0, 3.0)

print("Bounds in points: \(boundsInPoints)")
print("Native bounds: \(nativeBounds)")
print("Scale factor: \(scale)")
// Для iPhone 15 Pro вывод может быть:
// Bounds in points: (0.0, 0.0, 393.0, 852.0)
// Native bounds: (0.0, 0.0, 1179.0, 2556.0)
// Scale factor: 3.0

@1x, @2x, @3x и плотность пикселей

iOS использует систему ретинизации (Retina), где графические ресурсы предоставляются в нескольких разрешениях:

  • @1x — базовая плотность (1 логический пиксель = 1 физический пиксель)
  • @2x — высокая плотность (1 логический пиксель = 2×2 физических пикселя)
  • @3x — сверхвысокая плотность (1 логический пиксель = 3×3 физических пикселя)
// Пример загрузки изображения с учетом плотности пикселей
// Система автоматически выберет правильную версию (@1x, @2x, @3x)
let image = UIImage(named: "icon")
image?.scale // Показывает масштаб загруженного изображения

// Ручное создание изображения с определенным scale
UIGraphicsBeginImageContextWithOptions(CGSize(width: 100, height: 100), false, 2.0)
// ... отрисовка ...
let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

Практическое значение для разработчика

Ключевые аспекты работы с пикселями:

  1. Адаптивный дизайн

    • Все constraints и Auto Layout работают с logical points
    • Не привязывайтесь к абсолютным пиксельным значениям
    • Используйте динамические размеры и системные метрики
  2. Работа с графикой

    • Всегда предоставляйте ресурсы в @1x, @2x, @3x версиях
    • Для кастомной отрисовки учитывайте UIScreen.main.scale
    • Избегайте размытия из-за неправильного масштабирования
  3. Производительность

    • Изображения в @3x занимают в 9 раз больше памяти, чем @1x
    • Оптимизируйте размеры графических ресурсов
    • Используйте ассет-каталоги для управления ресурсами
// Правильный способ отрисовки с учетом плотности пикселей
func drawHighQualityImage() {
    let renderer = UIGraphicsImageRenderer(
        size: CGSize(width: 100, height: 100),
        format: UIGraphicsImageRendererFormat.default()
    )
    
    let image = renderer.image { context in
        // Контекст автоматически учитывает scale factor
        UIColor.blue.setFill()
        context.fill(CGRect(x: 0, y: 0, width: 100, height: 100))
    }
    
    // image.scale будет соответствовать scale factor экрана
}

Проблемы и решения

Типичные проблемы:

  • Размытые изображения — когда @2x изображение отображается на @3x экране
  • Ступенчатость линий — при отрисовке без учета scale factor
  • Потребление памяти — загрузка изображений большего размера, чем необходимо

Рекомендации:

  1. Всегда работайте с points в интерфейсе
  2. Для кастомной отрисовки используйте UIGraphicsImageRenderer
  3. Тестируйте на устройствах с разной плотностью пикселей
  4. Используйте PDF-вектор для простой графики

Понимание разницы между физическими и логическими пикселями — фундаментальный навык iOS-разработчика, напрямую влияющий на качество рендеринга, потребление ресурсов и адаптивность приложения на различных устройствах Apple.

Что такое pixel? | PrepBro