pt — шта је то, тачке и скалирање у iOS-у

Аутор: IT Sectr Објављено: 2026-02-25 Време читања: 8 мин

pt — тачке, логичка јединица мере у 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 је увео појам point-а са изласком 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Величина у pxРазмера
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-ом програмеру може бити потребна експлицитна конверзија у пикселе. Сва израчунавања анимација, детекција колизија и 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")

// Динамички тип — аутоматско скалирање
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
Тип јединицеЛогичка (независна од уређаја)Физичка (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. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође