Sürüşdürmə — mobil cihazın ekranından kənara çıxan məlumatı istifadəçiyə baxmağa imkan verən məzmun sürüşdürmə mexanizmidir. Apple Developer Documentation, 2024-ə görə, UIScrollView iOS-da sürüşdürməni tətbiq etmək üçün əsas elementdir. Android-də oxşar rolu jestləri emal edən və məlumatların göstərilməsini idarə edən RecyclerView yerinə yetirir. Sürüşdürmə olmadan müasir mobil interfeyslər mümkün olmazdı — xəbər lentləri, kontakt siyahıları və mətn səhifələri hər saniyə ondan istifadə edir.
Əsas məqamlar
Sürüşdürmə — mobil cihazın görünüş pəncərəsi daxilində məzmunun görünən sahəsini hərəkət etdirmək üçün interaktiv mexanizmdir. İstifadəçi barmağını ekranda gəzdirir və məzmun jest istiqamətində sürüşərək interfeysin gizli hissələrini açır. Sürüşdürmə fundamental qarşılıqlı təsir nümunəsidir: Nielsen Norman Group (2023) araşdırmasına görə, istifadəçilər mobil tətbiqlərdə vaxtlarının 78%-ni məzmunu sürüşdürməyə sərf edirlər.
Mobil inkişafda sürüşdürmə ixtisaslaşmış komponentlər — iOS-da ScrollView və Android-də RecyclerView vasitəsilə tətbiq edilir. Bu komponentlər təkcə toxunmaları emal etmir, həm də elementlərin təkrar istifadəsini, animasiyanı və ətaləti idarə edir. Tərtibatçı sadəcə uşaq görünüşləri konteynerin içərisinə yerləşdirir, sürüşdürmə mexanikasını isə platforma öz üzərinə götürür.
Google I/O 2024-ə görə, müasir sürüşdürmə tətbiqləri jest kompozisiyasından istifadə edir: sistem sürüşdürmə istiqamətini, sürəti və barmağın sürətlənməsini təyin edir, sonra hamar yavaşlama üçün fiziki model tətbiq edir. Sürüşdürmə ətaləti platformalar arasında fərqlənən sürtünmə əmsalı əsasında hesablanır — iOS Quadratic easing, Android isə Spline-based interpolation istifadə edir.
Şaquli sürüşdürmə — ən geniş yayılmış sürüşdürmə növü, xəbər lentlərində, çat siyahılarında və profillərdə istifadə olunur. Bütün məzmun yuxarıdan aşağıya düzülür və istifadəçi naviqasiya üçün barmağını yuxarı və ya aşağı hərəkət etdirir. Şaquli sürüşdürmə intuitivdir və bütün mobil platformalarda defolt olaraq dəstəklənir.
Üfüqi sürüşdürmə karusellər, şəkil qalereyaları və kateqoriya tabları üçün istifadə olunur. iOS-da bunun üçün üfüqi layout ilə UICollectionView, Android-də isə HorizontalScrollView və ya LinearLayoutManager.HORIZONTAL ilə RecyclerView istifadə edilir. Üfüqi sürüşdürmə diqqətli istifadə tələb edir, çünki sistemin "geri" və tətbiq dəyişdirmə jestləri ilə ziddiyyət təşkil edir.
Sonsuz sürüşdürmə — istifadəçi siyahının sonuna yaxınlaşdıqca məlumatların avtomatik yüklənməsi texnikası. Sonuncu element göstərildikdə, tətbiq avtomatik olaraq serverdən növbəti məlumat hissəsini tələb edir. UX Collective (2025)-ə görə, Infinite Scroll məzmun tətbiqlərində cəlbetməni 40% artırır, lakin altbilgiyə naviqasiya çətinliyi səbəbindən e-ticarətdə konversiyanı azaldır.
Parallaks sürüşdürmə dərinlik effekti yaradır: fon təbəqəsi sürüşdürmə zamanı ön plandan daha yavaş hərəkət edir. Bu texnika tez-tez açılış səhifələrində və profillərdə vizual effekt üçün istifadə olunur. Tətbiq müxtəlif sürət əmsalları olan bir neçə təbəqənin yerləşdirilməsini tələb edir — iOS-da bu UIScrollViewDelegate və fon görünüşlərinin offsetinin dəyişdirilməsi ilə edilir.
iOS-da sürüşdürmə UITableView, UICollectionView və UITextView-in miras aldığı UIScrollView sinfi vasitəsilə tətbiq edilir. UIScrollView toxunmaları ələ keçirir, toxunma nümunəsini təhlil edir və hərəkət deltasını hesablayır. İstifadəçi kəskin hərəkət edərsə, sistem ətalət animasiyasını — deceleration işə salır, bu formula ilə hesablanır: velocity * decayFactor ^ t. WWDC 2023-ə görə, Apple 0.998 əmsalı ilə parametrik yavaşlamadan istifadə edir ki, bu da təbii sürtünmə hissi verir.
Android-də sürüşdürmə ViewDragHelper və OverScroller vasitəsilə idarə olunur. Sistem MotionEvent.ACTION_MOVE hadisəsini alır, yerdəyişməni hesablayır və onu scrollY və ya scrollX-ə tətbiq edir. Ətalət OverScroller sinfi tərəfindən hesablanır, o, tənzimlənən sürtünmə ilə fiziki modelə əsaslanan Spline-interpolyasiyadan istifadə edir. Defolt sürtünmə əmsalı 0.015-dir — dəyər nə qədər yüksəkdirsə, sürüşdürmə bir o qədər tez dayanır.
Platformalar arasında əsas fərq — bounce effektidir. iOS defolt olaraq məzmunun hüdudlarından kənara sürüşdürmə zamanı rezin deformasiya (bounce) əlavə edir ki, bu da istifadəçiyə sona çatdığını bildirir. Android versiya 12-dən əvvəl overscroll effektinin açıq şəkildə qoşulmasını tələb edirdi, Material Design 3-dən isə stretch-overscroll üçün yerli dəstək aldı. Hər iki platforma həmçinin scroll chaining — hüduda çatdıqda sürüşdürmənin iç-içə konteynerdən valideyn konteynerə ötürülməsində fərqlənir.
| Komponent | Platforma | Sürüşdürmə növü | Virtualizasiya | Layout |
|---|---|---|---|---|
| UIScrollView | iOS | Şaquli / üfüqi | Xeyr | Content size |
| UICollectionView | iOS | Şaquli / üfüqi | Bəli | UICollectionViewLayout |
| RecyclerView | Android | Şaquli / üfüqi | Bəli | LayoutManager |
| ScrollView (Android) | Android | Şaquli | Xeyr | LinearLayout |
| HorizontalScrollView | Android | Üfüqi | Xeyr | LinearLayout |
UIScrollView — iOS-da hüceyrələrin təkrar istifadəsini dəstəkləməyən əsas konteyner. 1000 görünüş əlavə edildikdə, hamısı yaddaşda yaradılır ki, bu da performans üçün kritikdir. UICollectionView bu problemi dequeuing mexanizmi vasitəsilə həll edir — görünən hüceyrələr təkrar istifadə olunur, gizlədilənlər isə iyerarxiyadan silinir. Apple Engineering (2023)-ə görə, Compositional Layout ilə UICollectionView böyük məlumat dəstləri ilə işləyərkən UIScrollView ilə müqayisədə 50% daha hamar FPS təmin edir.
RecyclerView — Android-də standart sürüşdürmə komponenti, elementlərin təkrar istifadəsi üçün ViewHolder nümunəsindən istifadə edir. RecyclerView çevik arxitekturaya malikdir: LayoutManager yerləşməni təyin edir (Linear, Grid, Staggered), ItemAnimator animasiyaları idarə edir, ItemDecoration isə boşluqlar və ayırıcılar əlavə edir. Android Developer Summit 2024-ə görə, DiffUtil ilə RecyclerView 10 000 elementlik siyahının yenilənməsini 16 ms-də — bir animasiya kadrında emal edə bilər.
Sürüşdürmənin hamarlığı FPS (frames per second) ilə ölçülür — adi displeylər üçün hədəf dəyər 60 FPS, ProMotion üçün 120 FPS-dir. Hər kadr 16 ms (60 FPS) və ya 8 ms (120 FPS) ərzində emal edilməlidir. Sürüşdürmə jank (kadrların atlanması) yaradarsa, istifadəçi tətbiqin keyfiyyət qavrayışına mənfi təsir edən mikro gecikmələr hiss edir. Google Android Performance (2024)-ə görə, istifadəçilərin 75%-i müntəzəm sürüşdürmə lagları zamanı tətbiqi silir.
Sürüşdürmə laglarının əsas səbəbləri — layout thrashing və həddindən artıq ayırmalar. Layout thrashing tərtibatçı xassələri dəyişdirdikdən sonra layout parametrlərini (getWidth, getHeight) oxuduqda baş verir və məcburi yenidən hesablamaya səbəb olur. Hər belə çağırış layout keşini sıfırlayır və sistemi Measure və Layout-i yenidən yerinə yetirməyə məcbur edir. Həll yolu oxu və yazma əməliyyatlarını qruplaşdırmaqdır: əvvəlcə bütün ölçmələr, sonra bütün dəyişikliklər.
Virtualizasiya — böyük siyahılar üçün əsas optimallaşdırma texnikasıdır. iOS-da UICollectionView avtomatik olaraq yalnız görünən elementlər üçün hüceyrələr yaradır. Android-də RecyclerView təkrar istifadə olunan viewHolder hovuzundan istifadə edir. Əlavə olaraq prefetching tətbiq olunur: sistem elementləri 1–2 ekran irəlidən yükləyir ki, sürüşdürmə anında hüceyrələr hazır olsun. Android-də buna GapWorker, iOS-da prefetchDataSource cavabdehdir.
Şəkillər ayrıca optimallaşdırma tələb edir. Fonda yükləmə ayrı bir axında dekodlaşdırma ilə UI axınının bloklanmasının qarşısını alır. Glide (Android) və Kingfisher (iOS) kitabxanaları quraşdırılmış disk/yaddaş keşi, lazy loading və yükləmə vaxtı üçün placeholder təmin edir. SDWebImage benchmarks (2024)-ə görə, şəkil keşləməsindən istifadə qalereyaların sürüşdürülməsini şəbəkədən birbaşa yükləmə ilə müqayisədə 60% sürətləndirir.
Digər ümumi problem — ağır layout iyerarxiyalarıdır. Hər iç-içə görünüş Measure/Layout vaxtını artırır. Tövsiyə olunan dərinlik 5 səviyyədən çox olmamalıdır. Android-də ConstraintLayout düz iyerarxiyalar yaratmağa imkan verir, iOS-da isə Stack Views və SwiftUI layout-u avtomatik optimallaşdırır. Çox sayda elementdə Shadow və CornerRadius istifadəsi də sürüşdürməni yavaşladır — onlar yalnız zəruri olduqda tətbiq edilməlidir.
Tez-tez verilən suallar
Sürüşdürmə — cihazın ekran ölçülərini aşan məzmunun sürüşdürülməsi mexanizmi. İstifadəçi barmağını ekranda gəzdirir və məzmun jest istiqamətində hərəkət edərək gizli hissələri açır. Sürüşdürmə iOS-da UIScrollView və Android-də RecyclerView komponentləri vasitəsilə tətbiq edilir.
ScrollView (Android) bütün uşaq elementləri bir anda yaddaşa yükləyir — 500 elementdə bütün 500 görünüş eyni vaxtda yaradılır. RecyclerView virtualizasiyadan istifadə edir: yalnız görünən hüceyrələri yaradır və sürüşdürmə zamanı onları təkrar istifadə edir. Dinamik məlumatları olan siyahılar üçün həmişə RecyclerView seçin.
Infinite Scroll — cari siyahının sonuna çatdıqda yeni məlumatların avtomatik yükləndiyi texnikadır. İstifadəçi aşağı sərhədə sürüşdükdə, tətbiq API-ə sorğu göndərir və yeni elementlər əlavə edir. Bu, sosial şəbəkələrdə və məzmun lentlərində istifadəçi təcrübəsini yaxşılaşdırır.
Sürüşdürmə optimallaşdırması hüceyrələrin təkrar istifadəsi vasitəsilə elementlərin virtualizasiyasını, keşləmə ilə şəkillərin gec yüklənməsini, düz layout iyerarxiyalarını (5 səviyyədən çox olmayan), 1–2 ekran irəlidən məlumatların prefetchingini və layout thrashing-dən qaçınmanı əhatə edir. iOS-da prefetchDataSource, Android-də GapWorker istifadə edin.
Sürüşdürmə ətaləti — kəskin barmaq hərəkətindən sonra hamar yavaşlama effektidir. Sistem barmağın hərəkət sürətini yadda saxlayır və fiziki sürtünməni təqlid edərək tədricən sürəti azaltmaqla sürüşdürməni davam etdirir. iOS-da Quadratic easing, Android-də 0.015 sürtünmə əmsalı ilə Spline-interpolyasiya istifadə olunur.
Nəticə
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