pt — що це таке, Points і масштабування в iOS

Автор: IT Sectr Опубліковано: 2026-02-25 Час читання: 8 хв

pt — points, логічна одиниця виміру в iOS і macOS, що абстрагує інтерфейс від фізичної роздільної здатності екрана. Один point відповідає одному пікселю на екрані без Retina (@1x) і двом або трьом пікселям на Retina (@2x, @3x). Стаття пояснює принцип роботи pt, масштабування на різних екранах, використання CGPoint і UIFont.pointSize.

Головне

  • pt — логічна точка iOS, незалежна від фізичної роздільної здатності екрана
  • @1x, @2x, @3x — коефіцієнт масштабу, що визначає скільки пікселів припадає на одну точку
  • CGPoint — структура для координат у pt, основа всіх операцій позиціонування
  • UIFont.pointSize — розмір шрифту в точках, завжди повертається в pt
  • Відстань від екрана: iPhone 15 Pro — 1 pt = 3 px при піксельній щільності 460 PPI

Що таке pt в iOS?

pt (point) — логічна одиниця виміру в iOS, яка дозволяє розробнику описувати інтерфейс в абстрактних координатах, не залежних від фізичної роздільної здатності дисплея. Apple ввела поняття points з виходом iPhone 4 і Retina-дисплея в 2010 році. До Retina розробники використовували пікселі безпосередньо — один піксель UI дорівнював одному фізичному пікселю.

Система координат iOS побудована на точках: точка (0,0) знаходиться у верхньому лівому куті екрана, вісь X направлена вправо, вісь Y — вниз. Розмір екрана в точках залишається постійним для кожного класу пристроїв: iPhone SE — 375×667 pt, iPhone 15 Pro — 393×852 pt, iPad — 768×1024 pt (портрет), 1024×768 pt (ландшафт). Фізична роздільна здатність при цьому може бути 1179×2556 px (iPhone 15 Pro) — але розробник працює з точками.

За даними Apple Human Interface Guidelines, точки — фундаментальна абстракція UIKit. Всі фреймворки — UIKit, SwiftUI, Core Graphics, SpriteKit — оперують точками. Конвертація в пікселі відбувається автоматично на етапі рендерингу через UIScreen.nativeScale.

Коефіцієнти масштабу: @1x, @2x, @3x

Коефіцієнт масштабу (scale factor) визначає, скільки фізичних пікселів відповідає одній логічній точці. Apple використовує три рівні: @1x — 1 pt = 1 px (iPad mini без Retina, старі моделі), @2x — 1 pt = 2 px (більшість iPhone до 2020 року, iPad Retina), @3x — 1 pt = 3 px (iPhone X і новіші, включаючи iPhone 15 Pro).

ПристрійРозмір в ptРозмір в pxScale
iPhone SE (3rd gen)375 × 667750 × 1334@2x
iPhone 14390 × 8441170 × 2532@3x
iPhone 15 Pro Max430 × 9321290 × 2796@3x
iPad Pro 12.9"1024 × 13662048 × 2732@2x
iPad mini (6th gen)744 × 11331488 × 2266@2x

Значення scale factor доступне через UIScreen.main.scale (для UIKit) і @Environment(\.displayScale) (для SwiftUI). Використовується при завантаженні асетів: система автоматично вибирає зображення з суфіксом @2x або @3x з Assets.xcassets. Розробник не завантажує @1x-зображення на пристроях з Retina — це знижує продуктивність і якість.

CGPoint і координати в точках

Структура CGPoint — базовий тип для представлення координат в iOS і macOS. Містить два поля: x (CGFloat) і y (CGFloat), значення задаються в точках. CGPoint використовується у всіх фреймворках Apple: UIKit (frame.origin), Core Graphics (CGContext), SpriteKit (SKNode.position), Core Animation (CALayer.position).

swift
// CGPoint — робота з координатами в точках
import UIKit

// Створення точки
let point = CGPoint(x: 100.0, y: 200.0)
print("Координати: \(point.x), \(point.y)")

// Математичні операції
let offset = CGPoint(x: 16.0, y: 8.0)
let translated = CGPoint(
    x: point.x + offset.x,
    y: point.y + offset.y
)

// Відстань між точками
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)
}

// Перетворення точки в пікселі
extension CGPoint {
    func toPixels(scale: CGFloat) -> CGPoint {
        CGPoint(x: x * scale, y: y * scale)
    }
}

Метод toPixels в прикладі демонструє конвертацію точок у фізичні пікселі через UIScreen.main.scale. В UIKit ця конвертація відбувається автоматично при рендерингу, але в Core Graphics і при роботі з Metal розробнику може знадобитися явний перевід у пікселі. Всі розрахунки анімацій, collision detection і layout виконуються в точках.

UIFont.pointSize і типографіка

Властивість UIFont.pointSize повертає розмір шрифту в точках — це стандартна одиниця типографіки в iOS, успадкована з поліграфії (1 pt = 1/72 дюйма). Apple використовує pt для шрифтів з перших версій Mac OS. В iOS розмір шрифту задається в точках через UIFont.systemFont(ofSize:) або через SwiftUI Font.system(size:).

swift
// Робота з UIFont.pointSize в Swift
import UIKit

// Створення шрифту з розміром в pt
let titleFont = UIFont.systemFont(ofSize: 28.0, weight: .bold)
let bodyFont = UIFont.systemFont(ofSize: 17.0)
let captionFont = UIFont.systemFont(ofSize: 12.0)

// Читання pointSize
print("Розмір заголовка: \(titleFont.pointSize) pt")

// Dynamic Type — автоматичне масштабування
let scaledFont = UIFontMetrics.default.scaledFont(for: bodyFont)
print("Масштабований: \(scaledFont.pointSize) pt")

// Порівняння розмірів шрифтів
func font(from size: CGFloat, weight: UIFont.Weight) -> UIFont {
    UIFont.systemFont(ofSize: size, weight: weight)
}

UIFontMetrics — механізм динамічного масштабування шрифтів, доданий в iOS 11. Він автоматично коригує pointSize залежно від налаштувань доступності користувача (Settings > Display & Brightness > Text Size). Без використання UIFontMetrics шрифти не масштабуються, що порушує вимоги WCAG до доступності.

pt vs px: чим відрізняються

Різниця між pt і px критична для розуміння iOS-розробки. pt — логічна одиниця, px — фізична. Одна точка може відповідати 1, 2 або 3 пікселям залежно від scale factor. Розробник оперує точками, система перетворює їх у пікселі на етапі растеризації.

Характеристикаptpx
Тип одиниціЛогічна (device-independent)Фізична (hardware pixel)
Залежить від роздільної здатностіНіТак
Де використовуєтьсяUIKit, SwiftUI, Core Graphics, layoutЗображення, Metal, raw buffer
Конвертація1 pt = scale × px (scale від 1 до 3)1 px = pt / scale
Приклад (iPhone 15 Pro)393 × 852 pt1179 × 2556 px

Ключовий висновок: розмір інтерфейсу в точках однаковий на всіх пристроях одного класу. Екран 375 pt шириною — це і iPhone SE, і iPhone 14 (базова модель). Різниця тільки в тому, скільки фізичних пікселів вміщається в ці 375 pt. Це забезпечує єдинообразний UI без ручної адаптації під кожен пристрій.

pt в SwiftUI

В SwiftUI розробник не оперує точками явно — всі розміри задаються через Dp (device-independent points, еквівалент pt). SwiftUI автоматично застосовує scale factor при рендерингу, але надає доступ до нього через environment value displayScale.

swift
// SwiftUI — робота з точками та scale factor
import SwiftUI

struct ContentView: View {
    @Environment(\.displayScale) private var displayScale

    var body: some View {
        VStack(spacing: 16) {
            Text("Заголовок")
                .font(.system(size: 28, weight: .bold))

            Text("Основний текст прикладу")
                .font(.body)

            HStack {
                Text("Scale factor:")
                    .font(.caption)
                Text("\(displayScale, specifier: "%.1f")")
                    .font(.caption.weight(.bold))
            }
        }
        .padding(20)
        .frame(width: 300)
    }
}

SwiftUI абстрагує pt на рівні фреймворку. .font(.body) автоматично використовує Dynamic Type — розмір шрифту підлаштовується під налаштування користувача. SwiftUI не дозволяє задати розмір шрифту в пікселях — тільки через Font і систему типографіки. Це гарантує доступність інтерфейсу без додаткових зусиль розробника.

Часті запитання

В чому різниця між pt і px?

pt — логічна точка iOS, не залежна від роздільної здатності екрана. px — фізичний піксель дисплея. Одна точка на iPhone 15 Pro дорівнює трьом пікселям (@3x), на iPad Pro — двом (@2x). Розробник завжди оперує точками.

Як дізнатися scale factor пристрою?

В UIKit: UIScreen.main.scale. В SwiftUI: @Environment(\.displayScale). Типові значення: 1.0 (@1x), 2.0 (@2x), 3.0 (@3x). На iPhone 15 Pro Max значення — 3.0.

Який розмір шрифту використовувати для body text?

Apple рекомендує 17 pt для основного тексту (UIFontTextStyle.body). Для заголовків — 28–34 pt. Для підписів — 12–13 pt. Стилі Dynamic Type автоматично масштабуються під налаштування доступності користувача.

Що таке Dynamic Type в iOS?

Dynamic Type — система автоматичного масштабування шрифтів iOS, представлена в iOS 7. Дозволяє тексту адаптуватися під системні налаштування розміру шрифту (Text Size) і параметри доступності (Bold Text, Larger Text). Реалізується через UIFontMetrics або стилі SwiftUI Font.

Чи потрібно створювати @1x асети для iOS?

Ні. Сучасні пристрої Apple використовують Retina-дисплеї з @2x або @3x. @1x зображення потрібні тільки для сумісності з iPad без Retina (iPad 2, iPad mini 1st gen). Починаючи з iOS 13, всі пристрої підтримують як мінімум @2x.

Підсумки

  • pt — логічна одиниця iOS, що абстрагує інтерфейс від фізичної роздільної здатності та scale factor
  • @2x і @3x — коефіцієнти масштабу для Retina-дисплеїв, що визначають число пікселів на точку
  • CGPoint — структура для координат в точках, основа всіх операцій позиціонування в UIKit
  • UIFont.pointSize — розмір шрифту в точках з підтримкою Dynamic Type через UIFontMetrics
  • SwiftUI повністю абстрагує pt, використовуючи Font і Dynamic Type для автоматичної адаптації
  • Асети для iOS повинні постачатися в @2x і @3x, @1x не потрібен для сучасних пристроїв
  • Dynamic Type — обов'язковий механізм доступності, що автоматично масштабує шрифти під користувача

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також