Скролл 120 fps с помощью METAL
Офигенная статья от самого нишевого иос блогера. Jacobstechtavern делает клон Apple Photos и гонится за честными 120fps на бесконечной сетке фотографий.
Он берет привычный UICollectionView и на большом зуме (31 колонка, как в родном Photos) лента разваливается на хитчи и хэнги.
Вывод: тысячи одновременных ячеек === неподъемный оверхед на лайаут, reuse, PhotoKit-коллбэки и Core Animation commits. Он считает, что UIKit тут не виноват — его просто заставляют делать то, в чем он плох.
Он предлагает оставить UIKit ровно то, что он делает хорошо, а рендеринг целиком отдать GPU через Metal. Три части:
• UIScrollView только ради физики. Прозрачный пустой скролл-вью поверх MTKView.
• Геометрия во vertex shader. Фотоквадрат для GPU это два треугольника
• тянутся ~20k тумбнейлов и собираются в одну гигантскую текстуру (64px на фото при большом объёме, чтобы не убить память). Декод вне главного потока, aspect-fill в квадрат, BGRA-буфер,
Главный вывод через инженерную классику: не "UIKit плохой", а каждый инструмент под свою задачу:
🟣SwiftUI ок для большинства простых экранов
🟣UIKit надежная рабочая лошадка для сложных скролл-лэйаутов
🟣Но там, где на экране тысячи одинаковых по форме элементов с независимым лэйаутом, только offload на GPU через Metal раскрывает потолок.
Post #670
62
Forwarded from iOS Makes Me Hate