圆角屏幕(例:手表)的锁屏问题

昨天兴趣小组电话会议 Bobby 提到了很有意思的《CSS 圆角屏幕》[1]提案,用来处
理屏幕是圆的或是有圆角的。

但是比起 CSS 的问题,其实对于圆形屏幕我反而比较在意锁屏的问题。对于完全
圆形而不是圆角方形的屏幕,感觉一个比较有趣的地方是他可以显示 360 度上任
何一个角度,而不只是方形的 0、90、180、270 四个角度。

普及一下 [Screen Orientation] 规范[2],在他的模型里面的 “锁屏” 意思是让
屏幕的显示角度限制在某个角度 **集合** 里,比如说 lock("portrait") 是竖的
两个角度或是一个(取决于系统允许不允许正反两边翻),lock("protrait-
primary") 是一个竖的角度。另外,有一个特殊的值 "any",是指 0、90、180、
270 四个角度。请注意这里提 “集合” 的重要性。然后他说解锁的意思是

  unlock() = lock(<default-orientation>)

,其中 <default-orientation> 也是系统决定,虽然我们都知道这里大部分系统
上都是 <default-orientation> = "any"。


圆形屏幕上应该怎么办呢?这里分成四个问题容易思考一点:

1. 圆形屏幕上的 <default-orientation> 到底该是四个角度还是 360 度全部?

这个既然规范已经说是系统决定了,剩下就是喜好问题了。貌似 Apple Watch 没
有圆形屏幕,只有圆角的,可惜了,不能作为参考。

2. 假设在某圆形显示上 <default-orientation> 是所有角度,需要有一个值代表
四个角度(例:"four-sides")么?

如果 <default-orientation> 是所有角度,代表这个手表每转一点显示就跟着重
力动或是什么的,有一个值 "four-sides" 可能有帮助阅读,不会滑来滑去的?

3. 假设在某圆形显示上 <default-orientation> 是四个角度,需要有一个值代表
所有角度么(例:"360")么?

就可以 lock("360") 让画面跟随重力转动。虽然这个操作比较像是 “解锁” 不是
“锁屏”,可能 API 使用上感觉比较奇怪。或许变成 unlock("360") 比较好,最后
变成 lock/unlock 在吃一个参数的时候,是同一个函数。

4. "any" 在圆形显示上到底该指四个角度还是 360 度?

我是觉得干脆应该在现在的规范直接把这个值重新命名成 "four-sides" 之类的,
以免造成以后这里的问题,或是现在先那掉 "any" 算了,反正在大多数系统
<default-orientation> = "any" 的情况下,lock("any") 也没必要存在(因为跟
unlock() 一样),况且也跟 lock("360") 一样感觉很奇怪。

有比较好的 API 设计么?


CSS 那边我反而没什么想法了,除了觉得[1] 'device-radius' 对于圆形显示需要
'device-radius < 50%' 什么的很麻烦,还不如 'device-shape: circle',不过
Apple Watch 也没圆形屏幕,只有圆角的,或许想多了。不过话说回来,如果圆角
比圆形常见很多,极坐标 'polar-*' 的新元素定位提案也没什么用了吧?

'border-boundary' 这种要多花时间想想,暂时没什么时间了。

之前 CSSWG 讨论这个规范的记录在[3],有兴趣的可以看看。

[1] http://dev.w3.org/csswg/css-round-display/
[2] https://w3c.github.io/screen-orientation/
[3] https://lists.w3.org/Archives/Public/www-style/2015Mar/0313


以上

吕康豪
-- 
Software Engineer, Shenzhen, BGI

Received on Thursday, 26 March 2015 23:36:45 UTC