• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 图形变换
2<!--Kit: ArkUI-->
3<!--Subsystem: ArkUI-->
4<!--Owner: @CCFFWW-->
5<!--Designer: @yangfan229-->
6<!--Tester: @lxl007-->
7<!--Adviser: @HelloCrease-->
8
9用于对组件进行旋转、平移、缩放、矩阵变换等操作。
10
11> **说明:**
12>
13> 从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
14
15## rotate
16
17rotate(value: RotateOptions): T
18
19设置组件旋转。
20
21**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
22
23**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
24
25**系统能力:** SystemCapability.ArkUI.ArkUI.Full
26
27**参数:**
28
29| 参数名 | 类型                                    | 必填 | 说明                                                         |
30| ------ | --------------------------------------- | ---- | ------------------------------------------------------------ |
31| value  | [RotateOptions](#rotateoptions对象说明) | 是   | 可使组件在以组件左上角为坐标原点的坐标系中进行旋转(坐标系如下图所示)。其中,(x,&nbsp;y,&nbsp;z)指定一个矢量,作为旋转轴。<br/>旋转轴和旋转中心点都基于坐标系设定,组件发生位移时,坐标系不会随之移动。<br/>默认值: 在x、y、z都不指定时,x、y、z的默认值分别为0、0、1。指定了x、y、z任何一个值时,x、y、z中未指定的值默认为0。<br/>{<br/>centerX:&nbsp;'50%',<br/>centerY:&nbsp;'50%',<br/>centerZ:&nbsp;0,<br/>perspective:&nbsp;0<br/>}<br/>单位:vp<br/>![coordinates](figures/coordinates.png)<br/>centerZ、perspective从API version 10开始支持在ArkTS卡片中使用。 |
32
33**返回值:**
34
35| 类型   | 说明                     |
36| ------ | ------------------------ |
37| T | 返回当前组件。 |
38
39## rotate<sup>18+</sup>
40
41rotate(options: Optional\<RotateOptions>): T
42
43设置组件旋转。与[rotate](#rotate)相比,options参数新增了对undefined类型的支持。
44
45**卡片能力:** 从API version 18开始,该接口支持在ArkTS卡片中使用。
46
47**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
48
49**系统能力:** SystemCapability.ArkUI.ArkUI.Full
50
51**参数:**
52
53| 参数名  | 类型                                               | 必填 | 说明                                                         |
54| ------- | -------------------------------------------------- | ---- | ------------------------------------------------------------ |
55| options | Optional\<[RotateOptions](#rotateoptions对象说明)> | 是   | 可使组件在以组件左上角为坐标原点的坐标系中进行旋转(坐标系如下图所示)。其中,(x,&nbsp;y,&nbsp;z)指定一个矢量,作为旋转轴。<br/>旋转轴和旋转中心点都基于坐标系设定,组件发生位移时,坐标系不会随之移动。<br/>默认值: 在x、y、z都不指定时,x、y、z的默认值分别为0、0、1。指定了x、y、z任何一个值时,x、y、z中未指定的值默认为0。<br/>{<br/>centerX:&nbsp;'50%',<br/>centerY:&nbsp;'50%',<br/>centerZ:&nbsp;0,<br/>perspective:&nbsp;0<br/>}<br/>单位:vp<br/>![coordinates](figures/coordinates.png)<br/>centerZ、perspective从API version 10开始支持在ArkTS卡片中使用。<br/>当options的值为undefined时,恢复为无旋转效果。 |
56
57**返回值:**
58
59| 类型   | 说明                     |
60| ------ | ------------------------ |
61| T | 返回当前组件。 |
62
63## rotate<sup>20+</sup>
64
65rotate(options: Optional<RotateOptions | RotateAngleOptions>): T
66
67设置组件旋转效果。与[rotate](#rotate18)相比,options参数新增了对RotateAngleOptions类型的支持。
68
69**卡片能力:** 从API version 20开始,该接口支持在ArkTS卡片中使用。
70
71**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
72
73**系统能力:** SystemCapability.ArkUI.ArkUI.Full
74
75**参数:**
76
77| 参数名  | 类型                                                         | 必填 | 说明                                                         |
78| ------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
79| options | Optional\<[RotateOptions](#rotateoptions对象说明) \| [RotateAngleOptions](#rotateangleoptions20对象说明)> | 是   | RotateOptions可使组件在以组件左上角为坐标原点的坐标系中进行旋转(坐标系如下图所示)。其中,(x,&nbsp;y,&nbsp;z)指定一个矢量,作为旋转轴。<br/>旋转轴和旋转中心点都基于坐标系设定,组件发生位移时,坐标系不会随之移动。<br/>默认值:在x、y、z都不指定时,x、y、z的默认值分别为0、0、1。指定了x、y、z任何一个值时,x、y、z中未指定的值默认为0。<br/>{<br/>centerX:&nbsp;'50%',<br/>centerY:&nbsp;'50%',<br/>centerZ:&nbsp;0,<br/>perspective:&nbsp;0<br/>}<br/>RotateAngleOptions可使组件在以组件左上角为坐标原点的坐标系中进行旋转(坐标系如下图所示)。其中,(angleX,&nbsp;angleY,&nbsp;angleZ)指定三个轴方向上的旋转角。<br/>默认值:<br/>{<br/>angleX:0,<br />angleY:0,<br />angleZ:0,<br />centerX:&nbsp;'50%',<br/>centerY:&nbsp;'50%',<br/>centerZ:&nbsp;0,<br/>perspective:&nbsp;0<br/>}<br/>![coordinates](figures/coordinates.png)<br/>当options的值为undefined时,恢复为无旋转效果。 |
80
81**返回值:**
82
83| 类型 | 说明           |
84| ---- | -------------- |
85| T    | 返回当前组件。 |
86
87## translate
88
89translate(value: TranslateOptions): T
90
91设置组件平移。
92
93**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
94
95**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
96
97**系统能力:** SystemCapability.ArkUI.ArkUI.Full
98
99**参数:**
100
101| 参数名 | 类型                                          | 必填 | 说明                                                         |
102| ------ | --------------------------------------------- | ---- | ------------------------------------------------------------ |
103| value  | [TranslateOptions](#translateoptions对象说明) | 是   | 可使组件在以组件左上角为坐标原点的坐标系中进行移动(坐标系如下图所示)。其中,x,y,z的值分别表示在对应轴移动的距离,值为正时表示向对应轴的正向移动,值为负时表示向对应轴的反向移动。移动距离支持数字和字符串(比如'10px',‘10%’)两种类型。<br/>默认值:<br/>{<br/>x:&nbsp;0,<br/>y:&nbsp;0,<br/>z:&nbsp;0<br/>}<br/>单位:vp<br/>![coordinates](figures/coordinates.png)<br/>**说明:**<br/>z轴方向移动时由于观察点位置不变,z的值接近观察点组件会有放大效果,远离则缩小。<br/>![coordinateNode](figures/coordinateNote.png) |
104
105**返回值:**
106
107| 类型   | 说明                     |
108| ------ | ------------------------ |
109| T | 返回当前组件。 |
110
111## translate<sup>18+</sup>
112
113translate(translate: Optional\<TranslateOptions>): T
114
115设置组件平移。与[translate](#translate)相比,translate参数新增了对undefined类型的支持。
116
117**卡片能力:** 从API version 18开始,该接口支持在ArkTS卡片中使用。
118
119**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
120
121**系统能力:** SystemCapability.ArkUI.ArkUI.Full
122
123**参数:**
124
125| 参数名    | 类型                                                     | 必填 | 说明                                                         |
126| --------- | -------------------------------------------------------- | ---- | ------------------------------------------------------------ |
127| translate | Optional\<[TranslateOptions](#translateoptions对象说明)> | 是   | 可使组件在以组件左上角为坐标原点的坐标系中进行移动(坐标系如下图所示)。其中,x,y,z的值分别表示在对应轴移动的距离,值为正时表示向对应轴的正向移动,值为负时表示向对应轴的反向移动。移动距离支持数字和字符串(比如'10px',‘10%’)两种类型。<br/>默认值:<br/>{<br/>x:&nbsp;0,<br/>y:&nbsp;0,<br/>z:&nbsp;0<br/>}<br/>单位:vp<br/>![coordinates](figures/coordinates.png)<br/>**说明:**<br/>z轴方向移动时由于观察点位置不变,z的值接近观察点组件会有放大效果,远离则缩小。<br/>![coordinateNode](figures/coordinateNote.png)<br/>当translate的值为undefined时,恢复为无平移效果。 |
128
129**返回值:**
130
131| 类型   | 说明                     |
132| ------ | ------------------------ |
133| T | 返回当前组件。 |
134
135## scale
136
137scale(value: ScaleOptions): T
138
139设置组件缩放。
140
141**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
142
143**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
144
145**系统能力:** SystemCapability.ArkUI.ArkUI.Full
146
147**参数:**
148
149| 参数名 | 类型                                  | 必填 | 说明                                                         |
150| ------ | ------------------------------------- | ---- | ------------------------------------------------------------ |
151| value  | [ScaleOptions](#scaleoptions对象说明) | 是   | 可以分别设置X轴、Y轴、Z轴的缩放比例,默认值为1,同时可以通过centerX和centerY设置缩放的中心点。<br/>默认值:<br/>{<br/>x:&nbsp;1,<br/>y:&nbsp;1,<br/>z:&nbsp;1,<br/>centerX:'50%',<br/>centerY:'50%'<br/>} |
152
153**返回值:**
154
155| 类型   | 说明                     |
156| ------ | ------------------------ |
157| T | 返回当前组件。 |
158
159## scale<sup>18+</sup>
160
161scale(options: Optional\<ScaleOptions>): T
162
163设置组件缩放。与[scale](#scale)相比,options参数新增了对undefined类型的支持。
164
165**卡片能力:** 从API version 18开始,该接口支持在ArkTS卡片中使用。
166
167**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
168
169**系统能力:** SystemCapability.ArkUI.ArkUI.Full
170
171**参数:**
172
173| 参数名  | 类型                                             | 必填 | 说明                                                         |
174| ------- | ------------------------------------------------ | ---- | ------------------------------------------------------------ |
175| options | Optional\<[ScaleOptions](#scaleoptions对象说明)> | 是   | 可以分别设置X轴、Y轴、Z轴的缩放比例,默认值为1,同时可以通过centerX和centerY设置缩放的中心点。<br/>默认值:<br/>{<br/>x:&nbsp;1,<br/>y:&nbsp;1,<br/>z:&nbsp;1,<br/>centerX:'50%',<br/>centerY:'50%'<br/>}<br/>当options的值为undefined时,恢复为无缩放效果。 |
176
177**返回值:**
178
179| 类型   | 说明                     |
180| ------ | ------------------------ |
181| T | 返回当前组件。 |
182
183## transform
184
185transform(value: object): T
186
187可用于显示二维变换时的矩阵变换。包含三维变换时应使用[transform3D](#transform3d20)接口。
188
189**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
190
191**系统能力:** SystemCapability.ArkUI.ArkUI.Full
192
193**参数:**
194
195| 参数名 | 类型   | 必填 | 说明                                                         |
196| ------ | ------ | ---- | ------------------------------------------------------------ |
197| value  | object | 是   | 设置当前组件的变换矩阵。object当前仅支持[Matrix4Transit](../js-apis-matrix4.md)矩阵对象类型。 |
198
199**返回值:**
200
201| 类型   | 说明                     |
202| ------ | ------------------------ |
203| T | 返回当前组件。 |
204
205## transform<sup>18+</sup>
206
207transform(transform: Optional\<object>): T
208
209可用于显示二维变换时的矩阵变换。包含三维变换时应使用[transform3D](#transform3d20)接口。与[transform](#transform)相比,transform<sup>18+</sup>参数新增了对undefined类型的支持。
210
211**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
212
213**系统能力:** SystemCapability.ArkUI.ArkUI.Full
214
215**参数:**
216
217| 参数名 | 类型                                    | 必填 | 说明                     |
218| ------ | --------------------------------------- | ---- | ------------------------ |
219| transform | Optional\<object> | 是 | 设置当前组件的变换矩阵。object当前仅支持[Matrix4Transit](../js-apis-matrix4.md)矩阵对象类型。<br/>当transform的值为undefined时,恢复为单位矩阵的效果。 |
220
221**返回值:**
222
223| 类型   | 说明                     |
224| ------ | ------------------------ |
225| T | 返回当前组件。 |
226
227## transform3D<sup>20+</sup>
228
229transform3D(transform: Optional\<Matrix4Transit>): T
230
231设置组件的三维变换矩阵。当涉及包含透视效果的三维变换时,transform接口显示效果可能有误,推荐使用transform3D接口。
232
233**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
234
235**系统能力:** SystemCapability.ArkUI.ArkUI.Full
236
237**参数:**
238
239| 参数名    | 类型                                               | 必填 | 说明                                                         |
240| --------- | -------------------------------------------------- | ---- | ------------------------------------------------------------ |
241| transform | Optional\<[Matrix4Transit](#matrix4transit20)> | 是   | 三维变换矩阵。<br/>当transform的值为undefined时,恢复为单位矩阵的效果。 |
242
243**返回值:**
244
245| 类型 | 说明           |
246| ---- | -------------- |
247| T    | 返回当前组件。 |
248
249## Matrix4Transit<sup>20+</sup>
250
251type Matrix4Transit = Matrix4Transit
252
253**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
254
255**系统能力:** SystemCapability.ArkUI.ArkUI.Full
256
257| 类型                              | 说明           |
258| --------------------------------- | -------------- |
259| [Matrix4Transit](../js-apis-matrix4.md#matrix4transit)     | 单位矩阵对象。 |
260
261## RotateOptions对象说明
262
263**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
264
265**系统能力:** SystemCapability.ArkUI.ArkUI.Full
266
267| 名称                      | 类型                       | 只读 | 可选 | 说明                                                         |
268| ------------------------- | -------------------------- | ---- | ---- | ------------------------------------------------------------ |
269| x                         | number                     | 否   | 是   | 旋转轴向量x坐标。<br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。|
270| y                         | number                     | 否   | 是   | 旋转轴向量y坐标。<br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。|
271| z                         | number                     | 否   | 是   | 旋转轴向量z坐标。<br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。|
272| angle                     | number&nbsp;\|&nbsp;string | 否   | 否   | 旋转角度。取值为正时相对于旋转轴方向顺时针转动,取值为负时相对于旋转轴方向逆时针转动。取值可为string类型,如'90deg'。<br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。 |
273| centerX                   | number&nbsp;\|&nbsp;string | 否   | 是   | 变换中心点x轴坐标。表示组件变换中心点(即锚点)的x方向坐标。取值可为string类型,如'50','50%'。<br/>单位:vp<br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。 |
274| centerY                   | number&nbsp;\|&nbsp;string | 否   | 是   | 变换中心点y轴坐标。表示组件变换中心点(即锚点)的y方向坐标。取值可为string类型,如'50','50%'。<br/>单位:vp<br/>**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。 |
275| centerZ<sup>10+</sup>     | number                     | 否   | 是   | z轴锚点,即3D旋转中心点的z轴分量。<br/>默认值:0<br/>**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。 |
276| perspective<sup>10+</sup> | number                     | 否   | 是   | 视距,即视点到z=0平面的距离。<br/>旋转轴和旋转中心点都基于坐标系设定,组件发生位移时,坐标系不会随之移动。<br/>默认值:0<br/>**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。 |
277
278## RotateAngleOptions<sup>20+</sup>对象说明
279指定各轴旋转角的旋转参数选项。
280
281**卡片能力:** 从API version 20开始,该接口支持在ArkTS卡片中使用。
282
283**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
284
285**系统能力:** SystemCapability.ArkUI.ArkUI.Full
286
287| 名称                      | 类型                       | 只读 | 可选 | 说明                                                         |
288| ------------------------- | -------------------------- | ---- | ---- | ------------------------------------------------------------ |
289| angleX                    | number&nbsp;\|&nbsp;string | 否   | 是   | X轴方向上的旋转角。取值为正时相对于旋转轴方向顺时针转动,取值为负时逆时针转动。取值可为string类型,如'90deg'。<br/>默认值:0<br/>取值范围:(-∞, +∞) |
290| angleY                    | number&nbsp;\|&nbsp;string | 否   | 是   | Y轴方向上的旋转角。取值为正时相对于旋转轴方向顺时针转动,取值为负时逆时针转动。取值可为string类型,如'90deg'。<br/>默认值:0<br/>取值范围:(-∞, +∞) |
291| angleZ                    | number&nbsp;\|&nbsp;string | 否   | 是   | Z轴方向上的旋转角。取值为正时相对于旋转轴方向顺时针转动,取值为负时逆时针转动。取值可为string类型,如'90deg'。<br/>默认值:0<br/>取值范围:(-∞, +∞) |
292| centerX                   | number&nbsp;\|&nbsp;string | 否   | 是   | 变换中心点x轴坐标。表示组件变换中心点(即锚点)的x方向坐标。<br/>单位:vp<br/>默认值:'50%'<br/>取值范围:(-∞, +∞) |
293| centerY                   | number&nbsp;\|&nbsp;string | 否   | 是   | 变换中心点y轴坐标。表示组件变换中心点(即锚点)的y方向坐标。<br/>单位:vp<br/>默认值:'50%'<br/>取值范围:(-∞, +∞) |
294| centerZ                   | number                     | 否   | 是   | z轴锚点,即3D旋转中心点的z轴分量。<br/>默认值:0<br/>取值范围:(-∞, +∞) |
295| perspective               | number                     | 否   | 是   | 视距,即视点到z=0平面的距离。<br/>旋转轴和旋转中心点都基于坐标系设定,组件发生位移时,坐标系不会随之移动。<br/>默认值:0<br/>取值范围:(-∞, +∞) |
296
297## TranslateOptions对象说明
298
299**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
300
301**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
302
303**系统能力:** SystemCapability.ArkUI.ArkUI.Full
304
305| 名称 | 类型                       | 只读 | 可选 | 说明            |
306| ---- | -------------------------- | ---- | ---- | --------------- |
307| x    | number&nbsp;\|&nbsp;string | 否   | 是   | x轴的平移距离。<br/>类型为number时,单位为vp,取值范围为(-∞, +∞)。<br/>类型为string时,形式参考[Length](ts-types.md#length)的string类型。 |
308| y    | number&nbsp;\|&nbsp;string | 否   | 是   | y轴的平移距离。<br/>类型为number时,单位为vp,取值范围为(-∞, +∞)。<br/>类型为string时,形式参考[Length](ts-types.md#length)的string类型。 |
309| z    | number&nbsp;\|&nbsp;string | 否   | 是   | z轴的平移距离。<br/>类型为number时,单位为vp,取值范围为(-∞, +∞)。<br/>类型为string时,形式参考[Length](ts-types.md#length)的string类型。<br/>默认值:0.0 |
310
311## ScaleOptions对象说明
312
313**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
314
315**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
316
317**系统能力:** SystemCapability.ArkUI.ArkUI.Full
318
319| 名称    | 类型                       | 只读 | 可选 | 说明                                                         |
320| ------- | -------------------------- | ---- | ---- | ------------------------------------------------------------ |
321| x       | number                     | 否   | 是   | x轴的缩放倍数。x>1时以x轴方向放大,0<x<1时以x轴方向缩小,x<0时沿x轴反向并缩放。 |
322| y       | number                     | 否   | 是   | y轴的缩放倍数。y>1时以y轴方向放大,0<y<1时以y轴方向缩小,y<0时沿y轴反向并缩放。 |
323| z       | number                     | 否   | 是   | z轴的缩放倍数。z>1时以z轴方向放大,0<z<1时以z轴方向缩小,z<0时沿z轴反向并缩放。 |
324| centerX | number&nbsp;\|&nbsp;string | 否   | 是   | 变换中心点x轴坐标。表示组件变换中心点(即锚点)的x方向坐标。取值可为string类型,如'50','50%'。<br/>单位:vp |
325| centerY | number&nbsp;\|&nbsp;string | 否   | 是   | 变换中心点y轴坐标。表示组件变换中心点(即锚点)的y方向坐标。取值可为string类型,如'50','50%'。<br/>单位:vp |
326
327> **说明:**
328>
329> 当组件同时设置了rotate和scale属性时,centerX和centerY的取值会发生冲突,此时centerX和centerY的值以最后设定的属性的值为准。
330
331## 示例
332
333### 示例1(为组件添加图形变换效果)
334
335该示例通过rotate、translate、scale、transform为组件添加旋转、平移、缩放、变换矩阵效果。
336
337```ts
338// xxx.ets
339import { matrix4 } from '@kit.ArkUI';
340
341@Entry
342@Component
343struct TransformExample {
344  build() {
345    Column() {
346      Text('rotate').width('90%').fontColor(0xCCCCCC).padding(15).fontSize(14)
347      Row()
348        .rotate({
349          x: 0,
350          y: 0,
351          z: 1,
352          centerX: '50%',
353          centerY: '50%',
354          angle: 300
355        })// 组件以矢量(0,0,1)为旋转轴,绕中心点顺时针旋转300度
356        .width(100).height(100).backgroundColor(0xAFEEEE)
357
358      Text('translate').width('90%').fontColor(0xCCCCCC).padding(10).fontSize(14)
359      Row()
360        .translate({ x: 100, y: 10 })// x轴方向平移100,y轴方向平移10
361        .width(100)
362        .height(100)
363        .backgroundColor(0xAFEEEE)
364        .margin({ bottom: 10 })
365
366      Text('scale').width('90%').fontColor(0xCCCCCC).padding(15).fontSize(14)
367      Row()
368        .scale({ x: 2, y: 0.5 })// 高度缩小一倍,宽度放大一倍,z轴在2D下无效果
369        .width(100).height(100).backgroundColor(0xAFEEEE)
370
371      Text('Matrix4').width('90%').fontColor(0xCCCCCC).padding(15).fontSize(14)
372      Row()
373        .width(100).height(100).backgroundColor(0xAFEEEE)
374        .transform(matrix4.identity().translate({ x: 50, y: 50 }).scale({ x: 1.5, y: 1 }).rotate({
375          x: 0,
376          y: 0,
377          z: 1,
378          angle: 60
379        }))
380    }.width('100%').margin({ top: 5 })
381  }
382}
383```
384
385![transform](figures/transform.PNG)
386
387### 示例2(设置旋转视距)
388
389该示例通过perspective为组件添加视距效果。
390
391```ts
392// xxx.ets
393@Entry
394@Component
395struct Index {
396  @State prep: number = 10;
397
398  build() {
399    Row() {
400      Column() {
401        Stack()
402          .width(100)
403          .height(100)
404          .backgroundColor(Color.Red)
405          .rotate({ y: 1, angle: 45, perspective: this.prep })
406        Button('change prep')
407          .margin({ top: 100 })
408          .onClick(() => {
409            this.getUIContext()?.animateTo({
410              duration: 2000,
411              curve: Curve.EaseIn,
412              iterations: 1,
413              playMode: PlayMode.Normal,
414              onFinish: () => {
415                console.info('play end');
416              }
417            }, () => {
418              this.prep = 500 // 组件视距从10变换到500
419            })
420          })
421      }
422      .width('100%')
423    }
424    .height('100%')
425  }
426}
427```
428
429![perspective](figures/perspective.gif)
430
431### 示例3(按中心点旋转)
432
433该示例通过设置rotate和transform为不同的参数实现相同的旋转效果。
434
435```ts
436import { matrix4 } from '@kit.ArkUI';
437
438@Entry
439@Component
440struct MatrixExample {
441  build() {
442    Column({ space: 100 }) {
443      Text('Hello1')
444        .textAlign(TextAlign.Center)
445        .width(100)
446        .height(60)
447        .backgroundColor(0xAFEEEE)
448        .borderWidth(1)
449
450      Text('Hello2')
451        .textAlign(TextAlign.Center)
452        .width(100)
453        .height(60)
454        .backgroundColor(0xAFEEEE)
455        .borderWidth(1)
456        .rotate({
457          // 绕(100vp,60vp)的锚点旋转90度,rotate或scale的centerX、centerY为组件锚点
458          z: 1,
459          angle: 90,
460          centerX: 100,
461          centerY: 60
462        })
463
464      Text('Hello3')
465        .textAlign(TextAlign.Center)
466        .width(100)
467        .height(60)
468        .backgroundColor(0xAFEEEE)
469        .borderWidth(1)
470        .transform(matrix4.identity()
471          .rotate({
472            // 组件锚点(centerX,centerY)默认为(50%,50%),即锚点在(50vp,30vp)
473            // transform的rotate指定(centerX,centerY)为(50vp,30vp),相对于在组件本身锚点基础上再额外偏移(50vp,30vp)
474            // 此次变换相当于绕(100vp,60vp)旋转,和"Hello2"实现同样的旋转效果
475            z: 1,
476            angle: 90,
477            centerX: this.getUIContext().vp2px(50),
478            centerY: this.getUIContext().vp2px(30)
479          }))
480
481      Text('Hello4')
482        .textAlign(TextAlign.Center)
483        .width(100)
484        .height(60)
485        .backgroundColor(0xAFEEEE)
486        .borderWidth(1)
487        .scale({
488          // 当设置x或y时,centerX和centerY才能生效
489          // 设置组件锚点为(100vp,60vp)
490          x: 1,
491          y: 1,
492          centerX: 100,
493          centerY: 60
494        })// transform的rotate不指定centerX、centerY,此次旋转的中心相对于组件本身锚点没有额外偏移
495          // 该组件通过scale设置的锚点,绕(100vp,60vp)进行旋转,和"Hello2"实现同样的旋转效果
496        .transform(matrix4.identity().rotate({ z: 1, angle: 90 }))
497    }.width('100%')
498    .height('100%')
499  }
500}
501```
502
503![center](figures/center.PNG)
504
505### 示例4(通过transform3D实现图形变换)
506
507该示例通过设置transform3D实现图形变换效果。
508
509```ts
510import { matrix4 } from '@kit.ArkUI';
511
512let matrix: matrix4.Matrix4Transit = matrix4.init([
513  0.53033, 0, -0.53033, 0.00053033,
514  0, 0.75, 0, 0,
515  0.707107, 0, 0.707107, -0.000707107,
516  0, 0, 0, 1
517])
518
519@Entry
520@Component
521struct Tests {
522  build() {
523    Column() {
524      Stack() {
525        Stack()
526          .width(200)
527          .height(100)
528          .backgroundColor(Color.Grey)
529        Stack()
530          .width(200)
531          .height(100)
532          .backgroundColor(Color.Blue)
533          .transform3D(matrix)
534      }
535    }.width('100%')
536  }
537}
538```
539
540![transform3D](figures/transform3D.png)
541
542### 示例5(按各轴旋转角的方式实现旋转)
543
544该示例通过设置rotate的[RotateAngleOptions](#rotateangleoptions20对象说明)参数实现旋转效果。
545
546```ts
547// xxx.ets
548@Entry
549@Component
550struct Index {
551
552  build() {
553    Row() {
554      Column() {
555        Stack()
556          .width(100)
557          .height(100)
558          .backgroundColor(Color.Blue)
559          .rotate({ angleZ: -45 })
560        Button('rotateAngle')
561          .width("40%")
562          .margin({ top: 100 })
563          .rotate({ angleY: 30, centerX: '90%', perspective: 10 })
564        Image($r("app.media.startIcon"))
565          .width(200)
566          .height(200)
567          .rotate({ angleX: 60, angleY: -125, angleZ: 75, centerX: 100, centerZ: 20})
568      }
569      .width('100%')
570    }
571    .height('100%')
572  }
573}
574```
575
576![rotate.png](figures/rotate.png)
577