# @ohos.arkui.UIContext (UIContext)(系统接口) 在Stage模型中,WindowStage/Window可以通过loadContent接口加载页面并创建UI的实例,并将页面内容渲染到关联的窗口中,所以UI实例和窗口是一一关联的。一些全局的UI接口是和具体UI实例的执行上下文相关的,在当前接口调用时,通过追溯调用链跟踪到UI的上下文,来确定具体的UI实例。若在非UI页面中或者一些异步回调中调用这类接口,可能无法跟踪到当前UI的上下文,导致接口执行失败。 @ohos.window在API version 10 新增[getUIContext](./js-apis-window.md#getuicontext10)接口,获取UI上下文实例UIContext对象,使用UIContext对象提供的替代方法,可以直接作用在对应的UI实例上。 > **说明:** > > 本模块首批接口从API version 10开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 > > 示例效果请以真机运行为准,当前DevEco Studio预览器不支持。 > > 当前页面仅包含本模块的系统接口,其他公开接口参见[@ohos.arkui.UIContext (UIContext)](js-apis-arkui-UIContext.md)。 ## UIContext 以下API需先使用ohos.window中的[getUIContext()](./js-apis-window.md#getuicontext10)方法获取UIContext实例,再通过此实例调用对应方法。本文中UIContext对象以uiContext表示。 ### setDynamicDimming12+ setDynamicDimming(id: string, value: number): void 通过该方法设置组件的压暗程度。 > **说明:** > > 设置该属性后设置其他效果类属性会导致效果冲突。 **系统能力:** SystemCapability.ArkUI.ArkUI.Full **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------- | ------- | ------- | ------- | | id | string | 是 | 组件id。 | | value | number | 是 | 组件压暗程度取值范围[0,1], 由0到1逐渐变亮。 | **示例:** ```ts @Entry @Component struct Index { @State myCount : number = 100 build() { Column(){ Image($r('app.media.testImage')).width(500).height(800).id("test") }.width("100%").height("100%").onClick(()=>{ this.getUIContext().setDynamicDimming("test",1) animateTo({duration:5000 },()=>{ this.getUIContext().setDynamicDimming("test",0) }) }) } } ``` ![api-switch-overview](../apis-arkui/figures/dynamicDinning.gif) ### animateToImmediately12+ animateToImmediately(param: AnimateParam , event: () => void): void animateToImmediately接口允许用户通过UIContext对象,获取显式立即动画的能力。同时加载多个属性动画的情况下,使用该接口可以立即执行闭包代码中状态变化导致的过渡动效。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.ArkUI.ArkUI.Full **参数:** | 参数名 | 类型 | 必填 | 说明 | | ----- | ---------------------------------------- | ---- | ------------------------------------- | | param | [AnimateParam](arkui-ts/ts-explicit-animation.md#animateparam对象说明) | 是 | 设置动画效果相关参数。 | | event | () => void | 是 | 指定显示动效的闭包函数,在闭包函数中导致的状态变化系统会自动插入过渡动画。 | **示例:** 该示例实现了通过UIContext对象获取显式立即动画的能力,调用animateToImmediately接口实现参数定义的动画效果。 ```ts // xxx.ets @Entry @Component struct AnimateToImmediatelyExample { @State widthSize: number = 250 @State heightSize: number = 100 @State opacitySize: number = 0 private flag: boolean = true uiContext: UIContext | null | undefined = this.getUIContext(); build() { Column() { Column() .width(this.widthSize) .height(this.heightSize) .backgroundColor(Color.Green) .opacity(this.opacitySize) Button('change size') .margin(30) .onClick(() => { if (this.flag) { this.uiContext?.animateToImmediately({ delay: 0, duration: 1000 }, () => { this.opacitySize = 1 }) this.uiContext?.animateTo({ delay: 1000, duration: 1000 }, () => { this.widthSize = 150 this.heightSize = 60 }) } else { this.uiContext?.animateToImmediately({ delay: 0, duration: 1000 }, () => { this.widthSize = 250 this.heightSize = 100 }) this.uiContext?.animateTo({ delay: 1000, duration: 1000 }, () => { this.opacitySize = 0 }) } this.flag = !this.flag }) }.width('100%').margin({ top: 5 }) } } ``` ![animateToImmediately](figures/animateToImmediately.gif)