CALayer — iOS da QuartzCore freymvorkining tarkibiga kiruvchi grafik qatlamlarning asosiy sinfidir. iOS dagi har bir UIView bog'langan CALayer ga ega bo'lib, u kontentni render qilish, animatsiya va GPU da kompozitsiyani ta'minlaydi. Apple QuartzCore Documentation, 2025 ga ko'ra, CALayer 40 dan ortiq animatsiya qilinadigan xususiyatlarni qo'llab-quvvatlaydi va to'g'ridan-to'g'ri Metal orqali ishlaydi. CALayer ni tushunish silliq animatsiyalar yaratish va interfeys samaradorligini optimallashtirish uchun zarur.
Asosiy fikrlar
CALayer — QuartzCore freymvorkidan olingan sinf bo'lib, ekranning to'rtburchak maydonining rastr tasvirini boshqaradi. U vizual xususiyatlarni saqlaydi: frame, backgroundColor, opacity, shadow, border, transform. UIView dan farqli o'laroq, CALayer teginish hodisalarini qayta ishlamaydi, Auto Layout da ishtirok etmaydi va view controller hayot tsikliga ega emas.
Arxitektura nuqtai nazaridan, CALayer Core Animation kontekstida Model namunasini amalga oshiradi. Qatlam vizual xususiyatlarning holatini saqlaydi, Core Animation esa animatsiya davomida holatlar orasidagi interpolatsiyani boshqaradi. Bu ajratish drawRect orqali kontentni qayta chizmasdan qatlamning istalgan xususiyatlarini animatsiya qilish imkonini beradi.
Apple WWDC 2024 ga ko'ra, CALayer Metal orqali ishlash uchun qayta yozilgan. Zamonaviy render quvur liniyasi uch bosqichni o'z ichiga oladi: Commit (CPU da xususiyatlarni yangilash), Render (CPU da GPU uchun buyruqlarni yaratish) va Composite (GPU da buyruqlarni bajarish). CALayer har uch bosqichda qatnashadi, har biri uchun ma'lumotlarni taqdim etadi.
Har bir qatlam sublayers — ota qatlam ustida render qilinadigan bola qatlamlarni o'z ichiga olishi mumkin. Qatlamlar ierarxiyasi UIView ierarxiyasini takrorlaydi, lekin undan alohida mavjud bo'lishi mumkin. Dasturchi CALayer() orqali UIView dan mustaqil ravishda qatlamlar yaratishi va ularni addSublayer orqali ierarxiyaga qo'shishi mumkin.
UIView — CALayer ustidagi qo'shimcha bo'lib, u quyidagilarni qo'shadi: UIResponder orqali teginishlarni qayta ishlash, Auto Layout da ishtirok etish, storyboard da taqdimot, UIViewController bilan integratsiya. CALayer — faqat vizual elementlar uchun UIView siz ishlatilishi mumkin bo'lgan engil ob'ekt.
Amalda bu shuni anglatadiki, agar element teginish va layoutga muhtoj bo'lmasa, uni CALayer sifatida amalga oshirish mumkin. Masalan, fon animatsiyalari, yuklash ko'rsatkichlari, dekorativ elementlar — bularning barchasini UIView yukidan qochib, CALayer orqali amalga oshirish samaraliroqdir.
Asosiy xususiyatlar ramka, joylashish, ko'rsatish va vizual effektlarni o'z ichiga oladi. frame qatlamning ota koordinatalaridagi to'rtburchak maydonini, bounds — ichki koordinatalarni, position — qatlamning markazini belgilaydi. Position o'zgarishi implicit animation orqali sukut bo'yicha animatsiya qilinadi.
contents xususiyati qatlamning rastr kontentini to'g'ridan-to'g'ri o'rnatish imkonini beradi — CGImage yoki CIImage orqali. Bu drawRect orqali chizishga alternativdir: agar tasvir allaqachon tayyor bo'lsa, uni contents ga o'tkazish mumkin va Core Animation uni qo'shimcha ishlovsiz render qiladi.
Animatsiyalar uchun CABasicAnimation, CAKeyframeAnimation va CATransition ishlatiladi. Bu sinflarning barchasi CALayer xususiyatlarining kalit yo'llari orqali ishlaydi, bu esa deyarli har qanday atributni — position dan transform.rotation.z gacha animatsiya qilish imkonini beradi.
Apple bir nechta ixtisoslashtirilgan CALayer pastki sinflarini taqdim etadi, ularning har biri ma'lum bir vazifani hal qiladi. Asosiy CALayer o'rniga mos pastki sinfni tanlash apparat tezlashtirish hisobiga sezilarli samaradorlik o'sishini berishi mumkin.
CAReplicatorLayer kodni takrorlamasdan takrorlanuvchi naqshlar yaratish uchun ayniqsa foydalidir. Masalan, 10 nuqtadan iborat yuklash ko'rsatkichi instanceCount = 10 va instanceDelay animatsiya vaqti siljishi bilan bitta CAReplicatorLayer orqali amalga oshiriladi.
CALayer render qilish uch bosqichdan o'tadi. Commit — qatlam xususiyati o'zgartirilganda CPU da o'zgarishlar paketi shakllanadi. Render — Core Animation qatlam xususiyatlariga asoslanib CPU da Metal buyruqlarini yaratadi. Composite — GPU buyruqlarni bajaradi va kadrni ekranga chiqaradi. Butun jarayon displey yangilanish chastotasi bilan sinxronlashtiriladi.
Bir nechta qatlamlarning kompozitsiyasi da GPU ularni shaffoflik, maskalar va aralashtirish rejimlarini hisobga olgan holda yakuniy tasvirga birlashtiradi. Agar qatlam opaque = true bo'lsa, Core Animation kompozitsiyani optimallashtiradi: alfa aralashtirish o'rniga oddiy piksel almashtirish amalga oshiriladi, bu juda tez.
Apple Performance Guidelines ga ko'ra, CALayer renderini sekinlashtiruvchi asosiy omillar: murakkab sublayers ierarxiyasi (ekranda 30 dan ortiq qatlam), maskalardan foydalanish (mask xususiyati), shadowPathsiz avtomatik soya hisoblash, dinamik qatlamlar uchun shouldRasterize dan ortiqcha foydalanish.
XCode dagi Core Animation Instrument asbobi har bir qatlamning render vaqti, offscreen buferlar soni va drawRect chaqirish chastotasini kuzatish imkonini beradi. 60 FPS uchun optimal render vaqti — CPU da 8 ms va GPU da 8 ms dan oshmasligi kerak.
Offscreen rendering — qatlamni ekranga chiqarishdan oldin oraliq buferda render qilish. Kontent bilan cornerRadius + masksToBounds, guruhli opacity, maskalar va shouldRasterize ishlatilganda yuz beradi. Har bir offscreen o'tish 2–5 ms davom etadi, shuning uchun ortiqcha offscreen render samaradorlik uchun juda muhim.
Offscreen rendering diagnostikasi uchun Core Animation Instrument da Color Offscreen-Rendered asbobidan foydalaning. Sariq qatlamlar — offscreen, ko'k qatlamlar — to'g'ridan-to'g'ri ekranga render. Offscreen o'tishlarni minimallashtirish iOS da asosiy optimallashtirish texnikasidir.
Birinchi misol soya yaratish, burchaklarni yumaloqlash va chegara bilan CALayer ning asosiy sozlamalarini ko'rsatadi. shadowPath renderini tezlashtirish uchun aniq o'rnatilgan:
import UIKit
func configureLayer(_ view: UIView) {
let layer = view.layer
layer.cornerRadius = 16
layer.borderWidth = 2
layer.borderColor = UIColor.systemBlue.cgColor
layer.backgroundColor = UIColor.white.cgColor
layer.shadowColor = UIColor.black.cgColor
layer.shadowOpacity = 0.2
layer.shadowOffset = CGSize(width: 0, height: 4)
layer.shadowRadius = 8
layer.shadowPath = UIBezierPath(
roundedRect: view.bounds,
cornerRadius: layer.cornerRadius
).cgPath
}
Ikkinchi misol — perspektiv 3D transformatsiya bilan CABasicAnimation orqali transform animatsiyasi. Y o'qi atrofida aylanish animatsiyasi kartani aylantirish effektini yaratadi:
let flipAnimation = CABasicAnimation(keyPath: "transform")
var transform = CATransform3DIdentity
transform.m34 = -1.0 / 500.0
transform = CATransform3DRotate(transform, .pi, 0, 1, 0)
flipAnimation.toValue = NSValue(caTransform3D: transform)
flipAnimation.duration = 0.8
flipAnimation.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut)
cardLayer.add(flipAnimation, forKey: "flip")
Uchinchi misol — fon gradientini yaratish uchun CAGradientLayer dan foydalanish. Gradient GPU da render qilinadi va o'lchamlar o'zgartirilganda qo'shimcha resurs talab qilmaydi:
func addGradient(to view: UIView, colors: [UIColor]) {
let gradient = CAGradientLayer()
gradient.colors = colors.map { $0.cgColor }
gradient.locations = [0.0, 0.5, 1.0]
gradient.startPoint = CGPoint(x: 0.0, y: 0.0)
gradient.endPoint = CGPoint(x: 1.0, y: 1.0)
gradient.frame = view.bounds
view.layer.insertSublayer(gradient, at: 0)
}
Tez-tez beriladigan savollar
UIView — CALayer ustidagi teginishlarni qayta ishlash, Auto Layout va UIViewController bilan integratsiyani qo'shadigan qo'shimcha. CALayer faqat vizual taqdimot va animatsiya bilan ishlaydi, bu uni sof grafik vazifalar uchun engilroq va samaraliroq qiladi.
40 dan ortiq xususiyat, jumladan position, bounds, frame, opacity, backgroundColor, cornerRadius, transform, shadowOffset, shadowRadius, borderWidth va borderColor. Animatsiya UIView.animate animatsiya bloki ichida xususiyat o'zgartirilganda avtomatik ravishda boshlanadi.
shadowPath — UIBezierPath ko'rinishidagi aniq soya konturini o'rnating. ShadowPathsiz Core Animation soya shaklini hisoblash uchun kontentning alfa kanalini tahlil qiladi, bu qo'shimcha o'tishni talab qiladi. ShadowPath bilan soya kontent tahlilisiz oddiy geometrik figura sifatida render qilinadi.
Implicit animation — UIView.animate blokidan tashqarida CALayer ning animatsiya qilinadigan xususiyati o'zgartirilganda avtomatik animatsiya. Sukut bo'yicha davomiylik — 0.25 soniya. CATransaction.setDisableActions(true) orqali o'chirilishi yoki CATransaction.begin/commit orqali o'z davomiyligi o'rnatilishi mumkin.
CAShapeLayer vektor shakl — chiziq, doira, ko'pburchak, murakkab konturni ko'rsatish kerak bo'lganda samaraliroqdir. U alohida rastr bufer yaratmasdan GPU da yo'lni render qiladi. Asosiy CALayer fon, chegara va soya bilan to'rtburchak maydonlar uchun mos keladi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.