DEV Community

Ting
Ting

Posted on

presentationDetents里的detent是什么意思?

PresentationDetent是SwiftUI中上拉页面的一个新的概念。在iOS 15最初引入UISheetPresentationController的时候,因为用的词是一个非常见词,组里年纪大的美国同事着实费了一点时间,才理解detent这个词对应的页面行为。

如果查阅词典,会发现detent的中文翻译是“擒纵装置”、“棘爪”,都是专有名词,让人看了一头雾水。实际上,detent表达的意思很简单,就是各种步进结构里面“咔嗒”一下对应的一个档位。比如,在钟表的齿轮里面,为了让秒针每走一下停住,就会有一个棘轮配合擒纵装置来实现锁止。这样的每一次停顿,就是一个detent。

钟表棘轮

这个词更常见的应用在相机上。许多相机镜头带有手动光圈环,比如索尼的许多镜头上,就有每隔三分之一档可调整的光圈环。在下图中Sony 135mm GM镜头的示意图中,可以看到三分之一档的光圈环,以及开闭“咔嗒”以切换平滑或步进调整光圈的开关。在这里,光圈环的每一个步进,每一次“咔嗒”,就是一个detent。

光圈环与档位

回到SwiftUI,大家应该可以更好理解detent在这里的意义了。当拖拽上拉页面的“提手”,让页面处于底部、中部、顶部位置的不同档位,就是不同的detent。从一个档位调整到另一个档位,会发现它会自动滑入固定的位置,而不会停留其间。因此,苹果的工程师就因势利导采用了“detent”这个抽象而又随处可见的专业名词,来描述这样的UI。

Top comments (0)