Full Screen Cover — iOS-da modal təqdimat üslubudur, burada yeni ekran valideyn məzmunu görünmədən bütün displeyi tutur. Page Sheet-dən fərqli olaraq, Full Screen Cover əvvəlki ekranı tamamilə gizlədir və media məzmunu, foto redaktorları və avtorizasiya ekranları üçün istifadə olunur. Apple Developer, 2025-ə görə, bu üslub iOS 13-ə qədər defolt idi, lakin immersiv ssenarilər üçün üstünlük təşkil edir. SwiftUI-də .fullScreenCover modifikatoru tam ekran təqdimatı üçün deklarativ API təmin edir.
Əsas məqamlar
Full Screen Cover — iOS-da modal təqdimat üslubudur, burada təqdim olunan kontroller cihazın bütün ekranını tutur. Valideyn məzmunu tamamilə gizlənir ki, bu da immersiya effekti yaradır və istifadəçini cari tapşırığa yönəldir.
iOS 13-ə qədər Full Screen Cover iPhone-da yeganə modal təqdimat üslubu idi. Bütün present(_:animated:completion:) çağırışları defolt olaraq .fullScreen istifadə edirdi. iOS 13-dən başlayaraq Apple defolt üslubu .automatic olaraq dəyişdi, bu da iPhone üçün .pageSheet seçir. Lakin Full Screen Cover sərbəst qalır və tam diqqət tələb edən ssenarilər üçün tətbiq olunur.
Page Sheet-dən fərqli olaraq, Full Screen Cover valideyn məzmunu ilə qarşılıqlı əlaqəyə imkan vermir və onu modal pəncərənin altında göstərmir. İstifadəçi Full Screen Cover-i aşağı sürüşdürməklə bağlaya bilməz — bağlamaq üçün proqramlı şəkildə dismiss(animated:completion:) çağırışı və ya ekranın özündə bağlama düyməsi tələb olunur. Bu davranış UX dizayn edərkən nəzərə alınmalıdır.
Page Sheet — iOS 13-də ortaya çıxan ikinci əsas modal təqdimat üslubudur. Page Sheet yuxarıdan boşluq olan kart şəklində göstərilir, altında valideyn ekranı görünür. İstifadəçi Page Sheet-i aşağı sürüşdürməklə bağlaya bilər. Full Screen Cover isə əksinə, valideyn məzmununu gizlədir və sürüşdürmə ilə bağlanmanı dəstəkləmir.
| Xüsusiyyət | Full Screen Cover | Page Sheet |
|---|---|---|
| Fonun örtülməsi | Tam, valideyn məzmunu görünmür | Qismən, valideyn kartın altında görünür |
| Sürüşdürmə ilə bağlanma | Yox, yalnız proqramlı və ya düymə ilə | Bəli, aşağı sürüşdürmə bağlayır |
| Tipik tətbiq | Video, kamera, foto redaktoru, PDF | Formalar, parametrlər, detallı baxış |
| Göstərmə animasiyası | Aşağıdan yuxarı, tam ekran | Aşağıdan yuxarı, boşluqlu kart |
| Mövcudluq | iOS 2+ | iOS 13+ |
Full Screen Cover və Page Sheet arasında seçim məzmun və kontekstdən asılıdır. Tövsiyə olunur Full Screen Cover-dən tam diqqət tələb edən məzmun üçün istifadə etmək: tam ekran rejimində video, foto önbaxışı, sənədlərin skan edilməsi. Page Sheet — valideyn ekranının kontekstinin vacib olduğu tapşırıqlar üçün: redaktə formaları, seçim parametrləri, detallara baxış.
UIKit modal təqdimat üslubunu konfiqurasiya etmək üçün UIModalPresentationStyle.fullScreen sabitini təqdim edir. Bu xassəni present çağırmazdan əvvəl UIViewController-də təyin etmək, kontrollerin tam ekranda göstərilməsini təmin edir. Kontroller həmçinin klaviaturanın görünməsi və sistem hadisələrinin işlənməsi zamanı davranışı idarə edir.
.fullScreen üslubunu təyin etdikdən sonra bağlanma hadisələrini idarə etmək üçün presentationController?.delegate konfiqurasiya etmək tövsiyə olunur. UIAdaptivePresentationControllerDelegate delegatı bağlanma cəhdini ələ keçirməyə və məlumat itkisinin qarşısını almağa imkan verir. Page Sheet-dən fərqli olaraq, Full Screen Cover üçün delegat yalnız proqramlı dismiss çağırışı zamanı işləyir.
Full Screen Cover ekranın fırlanmasını və klaviaturanın görünməsini düzgün idarə edir. Fırlanma zamanı modal kontroller avtomatik olaraq yeni oriyentasiyaya uyğunlaşır. UIKeyboardWillShowNotification klaviatura görünəndə məzmunu yuxarı sürüşdürməyə imkan verir ki, mətn sahələri görünən qalsın. Page Sheet-dən fərqli olaraq, Full Screen Cover klaviatura görünəndə ölçülərini dəyişmir.
let playerVC = VideoPlayerViewController()
playerVC.modalPresentationStyle = .fullScreen
playerVC.modalTransitionStyle = .crossDissolve
present(playerVC, animated: true) {
playerVC.startPlayback()
}
// Bağla
dismiss(animated: true) {
print("Pleyer bağlandı")
}
SwiftUI deklarativ şəkildə tam ekran modal pəncərələr yaratmaq üçün .fullScreenCover modifikatorunu təqdim edir. .sheet (Page Sheet)-dən fərqli olaraq, .fullScreenCover analog davranışla .fullScreen üslubunu yaradır: məzmunun tam örtülməsi və sürüşdürmə ilə bağlanmanın olmaması.
Modifikator Bool tipli binding və ya opsional identifikasiya olunan obyekt qəbul edir. Binding true olaraq təyin edildikdə SwiftUI tam ekran pəncərəsinin görünməsini animasiya edir. Məlumat ötürmək üçün onDismiss parametri və məzmunlu closure istifadə olunur. \.dismiss mühit dəyəri modal pəncərəni daxildən bağlamağa imkan verir.
SwiftUI-də .fullScreenCover və .sheet arasında seçim UIKit-ə bənzəyir: .fullScreenCover immersiv məzmun üçün, .sheet kartlar üçün. SwiftUI avtomatik olaraq düzgün bağlanma davranışını seçir: .sheet sürüşdürmə ilə bağlana bilər, .fullScreenCover — yalnız proqramlı. Modifikatorlar bir View iyerarxiyasında birləşdirilə bilər.
struct CameraView: View {
@State private var showCamera = false
var body: some View {
Button("Kameranı aç") {
showCamera = true
}
.fullScreenCover(isPresented: $showCamera) {
CameraPreviewView()
.ignoresSafeArea()
}
}
}
struct CameraPreviewView: View {
@Environment(\.dismiss) private var dismiss
var body: some View {
ZStack {
Color.black.ignoresSafeArea()
VStack {
Spacer()
Button("Çək") { dismiss() }
.foregroundColor(.white)
}
}
}
}
Full Screen Cover UIKit-də UIModalTransitionStyle və SwiftUI-də xüsusi keçidlər vasitəsilə fərdi animasiyaları dəstəkləyir. Standart üslublar: .coverVertical (aşağıdan yuxarı), .crossDissolve (hamar görünmə), .flipHorizontal (çevrilmə) və .partialCurl (səhifə effekti).
Tamamilə fərdi animasiya üçün UIViewControllerAnimatedTransitioning protokolunu tətbiq edin. Bu, animasiya müddətini və keçidin özünü animateTransition(using:) metodu vasitəsilə təyin etməyə imkan verir. Animasiya kontrolleri UINavigationControllerDelegate və ya UIViewControllerTransitioningDelegate delegatı vasitəsilə təyin edilir.
SwiftUI-də .fullScreenCover üçün xüsusi keçidlər matchedGeometryEffect vasitəsilə yaradılır. Bu modifikator elementi valideyn View-dən tam ekran pəncərəsinə köçürməni animasiya edir. Məsələn, foto miniatürünə klik etdikdə o, hamar şəkildə tam ekrana açılaraq davamlılıq effekti yaradır. MatchedGeometryEffect id və namespace ilə işləyir, mənbə və hədəf mövqedəki elementi birləşdirir.
struct PhotoViewer: View {
@State private var selectedPhoto: String?
@Namespace private var animation
var body: some View {
HStack {
ForEach(["photo1", "photo2"], id: \.self) { photo in
Image(photo)
.matchedGeometryEffect(id: photo, in: animation)
.onTapGesture { selectedPhoto = photo }
}
}
.fullScreenCover(item: $selectedPhoto) { photo in
Image(photo)
.matchedGeometryEffect(id: photo, in: animation)
.ignoresSafeArea()
}
}
}
Full Screen Cover məzmunun valideyn interfeysindən yayınmadan bütün ekranı tutması lazım olan ssenarilər üçün tövsiyə olunur. Apple HIG üç əsas kateqoriya ayırır: media məzmunu, məzmun yaratma alətləri və müvəqqəti sistem interfeysləri.
Video pleyerlər, foto baxışı, PDF və komiks oxuma — Full Screen Cover istifadəsinin tipik nümunələri. AVPlayerViewController iOS-da landşaft rejiminə keçərkən avtomatik olaraq tam ekran rejimindən istifadə edir. Adobe Lightroom kimi foto redaktorları şəkillər kitabxanası üzərində tam ekran redaktoru açır.
Kamera, sənəd skaneri, səs yazısı — istifadəçinin tam diqqətini tələb edən tapşırıqlar. UIImagePickerController iOS 14-ə qədər kamera üçün Full Screen Cover istifadə edirdi. iOS 14-dən etibarən sistem seçicisi Page Sheet istifadə edir, lakin tərtibatçı xüsusi kamera üçün .fullScreen-i məcburi təyin edə bilər.
Full Screen Cover-dən istifadə etməyin: qeydiyyat formaları (Page Sheet üstünlük təşkil edir), valideyn səhifəsinin kontekstinin vacib olduğu mətn daxiletmə ekranları və modal pəncərə daxilində ardıcıl naviqasiya üçün. Material Design də sistem geri düyməsinin bloklanmasından qaçınmağı tövsiyə edir — iOS-da bu icazəlidir, lakin istifadəçi interfeys elementi vasitəsilə aydın bağlanma yoluna malik olmalıdır.
Tez-tez soruşulan suallar
.fullScreen valideyn kontrollerini gizlədir və onu göstərmə iyerarxiyasından çıxarır. .overFullScreen modal kontrolleri valideynin üzərində göstərir, lakin valideyn iyerarxiyada qalır və hadisələri almağa davam edir. overFullScreen şəffaf fonlar və təbəqələrin xüsusi animasiyaları üçün faydalıdır.
Apple iOS 13-də istifadəçi qarşılıqlı əlaqəsini yaxşılaşdırmaq üçün defolt üslubu dəyişdi. Page Sheet valideyn ekranının kontekstini görməyə və modal pəncərəni sürüşdürməklə bağlamağa imkan verir ki, bu da naviqasiyanı sürətləndirir. Full Screen Cover fondan yayınmadan tam diqqət tələb edən ssenarilər üçün qalır.
UIKit-də presentingViewController və ya presentedViewController üzərində dismiss(animated:completion:) çağırın. SwiftUI-də \.dismiss mühit dəyərindən istifadə edin və onu funksiya kimi çağırın. Valideyn kontrollerdən proqramlı bağlama üçün .fullScreenCover-ə ötürülən binding-i false olaraq dəyişin.
Bəli, Full Screen Cover iPad-də işləyir. iPad üçün əlavə üslublar mövcuddur: .formSheet (sabit ölçülü mərkəzləşdirilmiş pəncərə) və .currentContext (valideyn kontrollerinə nisbətən). iPad-də Full Screen Cover Page Sheet kimi görünə bilər, əgər modalPresentationStyle məcburi təyin edilməyibsə.
Page Sheet-dən fərqli olaraq, Full Screen Cover sürüşdürmə ilə bağlanmır, buna görə də məlumat itkisi yalnız proqramlı dismiss zamanı mümkündür. dismiss(animated:completion:) metodunu overwrite edin və ya bağlanmadan əvvəl çağrılan UIAdaptivePresentationControllerDelegate istifadə edin. Seçimlərlə UIAlertController göstərin: yadda saxla, ləğv et və ya ekranda qal.
Xülasə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun