autorotate元素完全解析

autorotate元素概述

autorotate是控制场景自动旋转的元素。通常只需要在代码中添加一次。用户可以像下面那样直接添加静态代码,也可以在action里动态改变autorotate元素的各项属性。如果要改变autorotate元素的属性,只需要使用set,例如set(autorotate.enabled,false); 

相关教程:

官方说明中文文档

自动旋转与循环浏览

enabled

这是启用或关闭自动旋转功能,设置为”true”即启用自动旋转,设置为”false”即关闭自动选择。可以通过set(autorotate.enabled,false);  set(autorotate.enabled,true); 

如果你有一个按钮是控制自动旋转的开启的,通常你要加上如下代码:

省略号为layer的其它属性。switch可自动切换enabled属性的true和false两个数值。

 

waittime

等待时间是指用户上一个交互动作之后,例如我点击了一下某个按钮,然后我没有任何其它操作,在经过等待时间后,全景才开始旋转。也就是说如果你设置为0的话,全景就会像不受束缚一样,总是要立刻转起来,通常设置为几秒钟左右。下面是动态的设置方法(设置为5秒)。

 

accel

这是全景开始旋转后的一个加速到匀速时的一个角加速度。数值越大,全景就越快从静止状态进入到允速旋转状态。下面是动态的设置方法。

 

speed

全景旋转时的最大角速度,这是一个匀速。如果设为负数,则向左旋转。下面是动态的设置方法。

 

horizon

全景进入到匀速时要旋转的水平位置。设置为0即为全景中间。如果是大于0小于90则向水平以上的位置,如果是小于0大于-90则向着水平以下的位置。将数值设置为off或任何非数字数值关闭该功能。

 

tofov

在开始自动旋转的同时缩放至指定的视角(也就是view元素中的fov属性)。将数值设置为off或任何非数字数值关闭该功能。

 

1.19后新增了内置的属性和动作

interruptionevents

这个属性可以定义是哪些事件可以中断自动旋转。默认值是

是用户用鼠标或触屏导致的全景视域的改变

是与layer和hotspot相关的交互。

是键盘输入事件

 

autorotate.isrotating

这是只读属性,可读取的值为布尔值,检查是否正在旋转。

 

autorotate.ispaused

只读属性,只有在autorotate.pause()后才会为true。

 

autorotate.start()

内置的动作,将enabled属性设置为true,直接开始自动旋转(无需经过等待时间autorotate.waittime)。

 

autorotate.stop()

中止自动旋转,将enabled属性设置为false。如需要重新开始旋转,需要autorotate.start()

 

autorotate.interrupt()

相当于模拟用户使用手势或鼠标在屏幕上点击或拖拽,自动旋转自身保持启用enabled,在没有用户交互之后的等待时间waittime后会再次开始。

 

autorotate.pause()

暂停当前正运行的自动旋转,或者在当前没有自动旋转时,使其一直暂停。例如,在鼠标悬停热点时暂停。也就是不管你现在是否正在旋转还是没在旋转,其实都可以让自动旋转进入到暂停状态。

 

autorotate.resume()

从暂停状态中恢复。将会恢复暂停之前的状态。

 

如何理解自动旋转的暂停

首先自动旋转有三种大状态,就是正在自动旋转中被用户中断以及没有启用自动旋转

 

那么暂停就会有以下几种可能性。

 

转的时候只读属性ispaused为false——暂停autorotate.pause() ,只读属性ispaused为true——恢复autorotate.resume(),只读属性ispaused为false——继续转。【相当于在自动旋转的过程中暂停】

 

启用了自动旋转但因为用户正在交互没有转的时候,只读属性ispaused为false的话——暂停autorotate.pause() ,只读属性ispaused为true——恢复autorotate.resume(),只读属性ispaused为false——还是没有转,维持之前用户交互时的那一刻。【相当于在自动旋转但被用户打断的过程中暂停】

 

停止中,只读属性ispaused为false的话——暂停autorotate.pause() ,只读属性ispaused为true——恢复autorotate.resume(),只读属性ispaused为false——还是没有转【相当于停止的过程中暂停】

 

如果在停止过程中,设置了暂停,但其后start了自动旋转,那么只读属性ispaused为false。也就是只要在旋转了肯定就不是在暂停中。

但如果是set(autorotate.enabled,true);那么就是还没转,还是维持set(autorotate.enabled,true);之前的ispaused的值。直到真的转起来了,那么ispaused为false。