原文概要

Nikita Prokopov (tonsky.me) 发表文章《Every Frame Perfect》, 指出 macOS 和主流软件中的 UI 动画存在一个共性问题: 如果你截取动画过程中的任一帧, 视觉上是混乱的——文字重叠、位置错位、光标与内容分离.

Tonsky 的观点: 动画的每一帧都应该经得起静态审视. 如果中间帧在截图里不合理, 运动也不会合理. 他将此称为 “every frame perfect” 标准.

来源: HN 热门榜 (/best)


讨论焦点

1. 核心辩论: 每一帧完美是否合理?

顶楼对此前提提出了挑战:

“Computer graphics is all about exploiting features of the human visual system. We perceive things differently when they’re moving vs. when they’re standing still. It’s very possible that a ‘wrong’ frame in isolation is the best looking one in a real-time context.” — fasterik (计算机图形学就是利用人类视觉系统的特性. 运动中和静止时的感知完全不同. 孤立时”错误”的帧在运动中可能是最好的.)

他以电影为例: 快速跟拍镜头中的单帧因运动模糊而模糊不清, 但在运动上下文里是完美选择.

“The nuance is correct motion blur appears clearer while guaranteeing it’s as clear as the human visual system can perceive moving details at that speed. If frozen, the method breaks.” — mrandish (正确的运动模糊让运动看起来更清晰——但冻结时它显然不清晰. 这不矛盾, 因为人类视觉就是这样工作的.)

但另一方认为 UI 动画不是电影:

“Unlike film, we are not recording reality in any way. Every pixel on screen is there because we put it there. A closer parallel is a cartoon. Cartoon inbetweening is not an example of imperfect frames — these are carefully crafted.” — jchw (UI 不是在记录现实, 每个像素都是我们放上去的. 更接近的类比是卡通, 但动画师精心绘制了中间帧. buggy 的 UI 动画不是精心设计, 只是偷懒.)

2. Smear Frames: 艺术家的故意不完美

讨论引入了动画中的 smear frame 概念:

“In animation there are smear frames. They’re not cost cutting — they actually require extra effort. They are intentionally placed there by artists based on taste and measured results.” — bmacho (动画中有 smear frame, 不是省钱反而是花更多功夫. 艺术家出于审美考量有意为之.)

但反对者指出这与 UI 动画的本质区别:

“Cartoon animating can explain away weird frames with artistic intent. You can’t explain away glitchy UI transitions this way because they’re not intentional — they’re taking the technical path of least resistance.” — jchw (卡通的怪异帧可以用艺术意图解释. UI 的奇怪过渡不行——它们只是选了技术上最省事的路径.)

3. macOS 动画质量滑坡

一位用户的对比引人注目:

“I still have Sonoma on some of my devices. The save dialog, albeit a little shakey, is nowhere as chaotic as in your example. The buttons in Notes move between panes in a perfect seamless manner.” — m132(附 Streamable 视频对比) (我还在用 Sonoma, 那里的动画远没有文章展示的那么混乱.)

他将原因归为 SwiftUI:

“Apple earned its current valuation with the iPhone, one that you didn’t actually want to smash against a wall after a few minutes of use. Now these animations are bringing back exactly the Windows Mobile and Symbian vibes.” (苹果靠 iPhone 达到现在的市值——它至少不会让你用几分钟就想砸墙. 现在这些动画又带回了 Windows Mobile 和塞班的感觉.)

另一位补充:

“SwiftUI aims to make animations a single line view modifier rather than manual CoreAnimation curves. But one-size-fits-all rule and precise polish are fundamentally at odds.” — gyomu (SwiftUI 让动画变成一行修饰符, 但这与精确打磨从根本上冲突.)

4. 动画速度: 越快越好

多位经验者强调动画应该快到不被注意:

“A 50-100 ms animation is more than enough for most motions and keeps the UI feeling snappy. Animation should be decoupled from input wherever possible. I hate it when I have to sit there waiting for an animation to complete before the app will start acknowledging my keystrokes.” — fasterik (50-100ms 对大多数动画已经足够. 动画必须与输入解耦. 我恨死了为了等动画完成才能敲下一个按键.)

“I once had a new designer argue that if an animation was as fast as I wanted, no one would be able to appreciate the excellent S-curve ease-in/out. I had to explain if a simple state-change animation was slow enough to be consciously ‘appreciated’, it had failed in its purpose.” — mrandish (有设计师说动画太快就没人能欣赏优美的缓动曲线了. 我得解释: 如果一个动画慢到能被”欣赏”, 它已经失败了.)

“I turn on dev mode on my Android phone for two settings: DPI and double animation speed. On Windows I turn animations off for the same reason. Just let me use the thing.” — saratogacx (我开开发者模式就是为了两个设置: DPI 和两倍动画速度. 在 Windows 上直接关动画. 让我用产品就行.)

5. 工具类 UI 不应该有动画

一个有力的观点将 UI 动画定性为工具 vs 娱乐的对立:

“Games are entertainment products, not tools. It’s acceptable for a game UI to draw attention to itself for artistic effect. An instant UI effectively functions as part of your body, just like hand tools do. Animations make this impossible.” — mrob (游戏是娱乐产品, 不是工具. 游戏 UI 为了艺术效果吸引注意力可以接受. 但即时响应的 UI 应该像你的手一样成为身体的延伸. 动画让这变得不可能.)

“Compare an ordinary pencil to a pencil with a pompom on a spring attached to the end. Which is most fun for brief use? Which would you rather write a whole page of text with?” (普通铅笔 vs 笔尾加了弹簧绒球的铅笔. 哪个好玩? 哪个你想用来写一整页字?)

6. 打字时机: 被忽略的交互原则

一个有经验的用户指出动画中一个更深的可用性问题:

“Experienced users will often start typing without looking based on what they trust the eventual state of the UI will be. Moving the cursor immediately makes it explicit that this should work. This is following a more important rule: ‘Never make keyboard input timing dependent!’” — bwhmather (熟练用户经常不看着屏幕就开始打字, 基于他们对最终状态的信任. 光标准确且即时非常重要. 更重要的原则是: 永远不要让键盘输入的时机依赖动画!)


典型观点一览

立场 用户 一句话
🔵 动态决定一切 fasterik 运动中的感知与静止帧完全不同
🔵 运动模糊正确 mrandish 正确模糊让运动更清晰, 但静止帧必然模糊
🟡 artisan 有理 bmacho smear frame 是艺术家有意为之, 不是巧合
🔴 SwiftUI 背锅 gyomu 一行代码的便利与精确打磨不可兼得
🔴 Sonoma 更好 m132 macOS 动画在倒退, SwiftUI 是元凶
🔴 工具不该有动画 mrob 类纸笔工具追求不可感知, 动画是反向
⚪ 速度是生命 saratogacx 开发者模式开两倍动画速度才是默认设置
⚪ 输入不能等动画 bwhmather 键盘输入与动画时机必须解耦

总体情绪

这场讨论展示了 HN 社区典型的”理想主义 vs 实用主义”分裂. Tonsky 的”每帧完美”标准获得了一些认同, 但更多人指出动画感知的真相——人类视觉系统不是截图比较器. 最大共识反而是非技术性的: 绝大多数 UI 动画太长、太慢、太自我表现. 多位有实际经验的设计师和开发者一致认为: 50-100ms 为上限, 越快越好, 最好快到不被注意.


引用帖子

# 标题 链接
1 HN 讨论: Every Frame Perfect https://news.ycombinator.com/item?id=48516251
2 原文 (tonsky.me) https://tonsky.me/blog/every-frame-perfect/
**免责声明**: 本文是对 HN 讨论的编译与提炼. 引用的英文评论均取自原文. 所有观点来自 HN 评论者, 不代表本人立场.