Один из принципов Wayland — «каждый кадр идеален». Речь там идёт о технической стороне, но этот подход применим и к дизайну интерфейсов. Главное правило: если сделать скриншот приложения в любой момент времени, он должен иметь смысл. Пользователи не видят код, они судят о качестве программы по интерфейсу. Хороший UI — сигнал, что разработчики потратили время на полировку, а значит, и код скорее всего в порядке.
На практике это означает несколько вещей. Никаких белых вспышек между экранами. Никакой частично загруженной информации. Никакого дёрганья вёрстки во время загрузки. Внутренняя согласованность: если одна часть интерфейса пишет «1 обновление доступно», другая не должна показывать «Проверка обновлений...». И, самое главное, точные анимации.
Анимации часто забывают. UI может отлично выглядеть в начальном и конечном состоянии, но между ними — полный хаос. Если применить правило и сделать скриншот в середине анимации, кадр окажется неидеальным. Вот пример из Safari: плейсхолдер текста движется из центра, а курсор анимируется с левой позиции. Мелочь, но создаётся ощущение, что эти компоненты не синхронизированы друг с другом, будто их не проектировали вместе. Так теряется доверие.
Ещё хуже в приложении Photos: при переключении между Crop и Adjust картинка мгновенно меняется, а граница кадрирования анимируется. Это создаёт ложное ощущение, что что-то незаметно меняется. Интерфейс не должен обманывать — он должен быть точным инструментом. Иногда анимация призвана помочь понять переход, а делает только хуже. В YouTube не смогли просто передвинуть прямоугольник из одной позиции в другую — сделали это очень странно. Вероятно, сказываются технические ограничения DOM-архитектуры, которую выбрали раньше. Технология переиграла программиста.
Иногда анимации оставляют на откуп судьбе — «будь что будет». Результат выглядит так, что на замедленном воспроизведении детали просто поражают. Вывод простой: обращайте внимание не только на начальное и конечное состояние, но и на всё, что между ними. Каждый кадр важен. Preview.app завершает тему непровоцированной анимацией зума.