1# @ohos.arkui.UIContext (UIContext)(系统接口) 2 3在Stage模型中,WindowStage/Window可以通过loadContent接口加载页面并创建UI的实例,并将页面内容渲染到关联的窗口中,所以UI实例和窗口是一一关联的。一些全局的UI接口是和具体UI实例的执行上下文相关的,在当前接口调用时,通过追溯调用链跟踪到UI的上下文,来确定具体的UI实例。若在非UI页面中或者一些异步回调中调用这类接口,可能无法跟踪到当前UI的上下文,导致接口执行失败。 4 5@ohos.window在API version 10 新增[getUIContext](./js-apis-window.md#getuicontext10)接口,获取UI上下文实例UIContext对象,使用UIContext对象提供的替代方法,可以直接作用在对应的UI实例上。 6 7> **说明:** 8> 9> 本模块首批接口从API version 10开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 10> 11> 示例效果请以真机运行为准,当前DevEco Studio预览器不支持。 12> 13> 当前页面仅包含本模块的系统接口,其他公开接口参见[@ohos.arkui.UIContext (UIContext)](js-apis-arkui-UIContext.md)。 14 15## UIContext 16 17以下API需先使用ohos.window中的[getUIContext()](./js-apis-window.md#getuicontext10)方法获取UIContext实例,再通过此实例调用对应方法。本文中UIContext对象以uiContext表示。 18 19### setDynamicDimming<sup>12+<sup> 20 21setDynamicDimming(id: string, value: number): void 22 23通过该方法设置组件的压暗程度。 24 25 26> **说明:** 27> 28> 设置该属性后设置其他效果类属性会导致效果冲突。 29 30**系统能力:** SystemCapability.ArkUI.ArkUI.Full 31 32**参数:** 33 34| 参数名 | 类型 | 必填 | 说明 | 35| ------- | ------- | ------- | ------- | 36| id | string | 是 | 组件id。 | 37| value | number | 是 | 组件压暗程度取值范围[0,1], 由0到1逐渐变亮。 | 38 39**示例:** 40 41```ts 42@Entry 43@Component 44struct Index { 45 @State 46 myCount : number = 100 47 48 build() { 49 Column(){ 50 Image($r('app.media.testImage')).width(500).height(800).id("test") 51 }.width("100%").height("100%").onClick(()=>{ 52 this.getUIContext().setDynamicDimming("test",1) 53 animateTo({duration:5000 },()=>{ 54 this.getUIContext().setDynamicDimming("test",0) 55 }) 56 }) 57 } 58} 59``` 60 61 62### animateToImmediately<sup>12+</sup> 63 64animateToImmediately(param: AnimateParam , event: () => void): void 65 66animateToImmediately接口允许用户通过UIContext对象,获取显式立即动画的能力。同时加载多个属性动画的情况下,使用该接口可以立即执行闭包代码中状态变化导致的过渡动效。 67 68**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 69 70**系统能力:** SystemCapability.ArkUI.ArkUI.Full 71 72**参数:** 73 74| 参数名 | 类型 | 必填 | 说明 | 75| ----- | ---------------------------------------- | ---- | ------------------------------------- | 76| param | [AnimateParam](arkui-ts/ts-explicit-animation.md#animateparam对象说明) | 是 | 设置动画效果相关参数。 | 77| event | () => void | 是 | 指定显示动效的闭包函数,在闭包函数中导致的状态变化系统会自动插入过渡动画。 | 78 79**示例:** 80 81该示例实现了通过UIContext对象获取显式立即动画的能力,调用animateToImmediately接口实现参数定义的动画效果。 82 83```ts 84// xxx.ets 85@Entry 86@Component 87struct AnimateToImmediatelyExample { 88 @State widthSize: number = 250 89 @State heightSize: number = 100 90 @State opacitySize: number = 0 91 private flag: boolean = true 92 uiContext: UIContext | null | undefined = this.getUIContext(); 93 94 build() { 95 Column() { 96 Column() 97 .width(this.widthSize) 98 .height(this.heightSize) 99 .backgroundColor(Color.Green) 100 .opacity(this.opacitySize) 101 Button('change size') 102 .margin(30) 103 .onClick(() => { 104 if (this.flag) { 105 this.uiContext?.animateToImmediately({ 106 delay: 0, 107 duration: 1000 108 }, () => { 109 this.opacitySize = 1 110 }) 111 this.uiContext?.animateTo({ 112 delay: 1000, 113 duration: 1000 114 }, () => { 115 this.widthSize = 150 116 this.heightSize = 60 117 }) 118 } else { 119 this.uiContext?.animateToImmediately({ 120 delay: 0, 121 duration: 1000 122 }, () => { 123 this.widthSize = 250 124 this.heightSize = 100 125 }) 126 this.uiContext?.animateTo({ 127 delay: 1000, 128 duration: 1000 129 }, () => { 130 this.opacitySize = 0 131 }) 132 } 133 this.flag = !this.flag 134 }) 135 }.width('100%').margin({ top: 5 }) 136 } 137} 138``` 139