CircleProgress组件在iphone13&iOS16.1.1渐变色显示异常

小程序开发相关产品技术讨论,包括面板、智能小程序、React Native、Ray跨端框架、Panel SDK、微信小程序、小程序开发工具(IDE)及其他开发技术相关等话题


wink_li
Posts: 20

  • Tuya MiniApp IDE 版本信息:0.8.3
    • App 应用版本信息: 智能生活6.1.0
    • @ray-js/ray"1.5.27", @ray-js/panel-sdk"1.13.1"的版本
    • 移动设备信息:iphone13 iOS16.1.1
    • 相关代码:

<RayCircleProgress
className={styles.circle}
value={localTempPrt}
ringRadius={135}
innerRingRadius={111}
colorList={[
{ offset: 0, color: '#295bdd' },
{ offset: 0.5, color: '#6A53D1' },
{ offset: 1, color: '#f65028' },
]}
startDegree={135}
offsetDegree={270}
touchCircleStrokeStyle={'rgba(0, 0, 0, 0.4)'}
thumbBorderWidth={9}
onTouchMove={handleMove}
onTouchEnd={handleEnd}
)
}
/>

Code: Select all

- 问题描述(复现步骤):在iOS18.3中运行正常,iOS16.1.1颜色显示异常[attachment=0]异常1.png[/attachment]
Attachments
异常1.png
正常1.PNG

Tags:
crisiron
Posts: 118

Re: CircleProgress组件在iphone13&iOS16.1.1渐变色显示异常

“yarn add --registry=https://registry.npmjs.org/@ray-js/circ ... .11-beta-1” 新版本已兼容,可以先添加试用, 注意由于使用了兼容写法,圆角暂不支持,后续会迭代添加,有问题及时反馈

wink_li
Posts: 20

Re: CircleProgress组件在iphone13&iOS16.1.1渐变色显示异常

crisiron 2025年 Jan 9日 19:23

“yarn add --registry=https://registry.npmjs.org/@ray-js/circ ... .11-beta-1” 新版本已兼容,可以先添加试用, 注意由于使用了兼容写法,圆角暂不支持,后续会迭代添加,有问题及时反馈

预计何时迭代

crisiron
Posts: 118

Re: CircleProgress组件在iphone13&iOS16.1.1渐变色显示异常

wink_li 2025年 Jan 13日 14:04
crisiron 2025年 Jan 9日 19:23

“yarn add --registry=https://registry.npmjs.org/@ray-js/circ ... .11-beta-1” 新版本已兼容,可以先添加试用, 注意由于使用了兼容写法,圆角暂不支持,后续会迭代添加,有问题及时反馈

预计何时迭代

由于没有合适的API 需要手动绘制,比较麻烦,预计年后; 另正式版本已经发布,项目中引用正式版本 yarn add --registry=https://registry.npmjs.org/ @ray-js/circle-progress@0.0.11

wink_li
Posts: 20

Re: CircleProgress组件在iphone13&iOS16.1.1渐变色显示异常

crisiron 2025年 Jan 13日 14:10
wink_li 2025年 Jan 13日 14:04
crisiron 2025年 Jan 9日 19:23

“yarn add --registry=https://registry.npmjs.org/@ray-js/circ ... .11-beta-1” 新版本已兼容,可以先添加试用, 注意由于使用了兼容写法,圆角暂不支持,后续会迭代添加,有问题及时反馈

预计何时迭代

由于没有合适的API 需要手动绘制,比较麻烦,预计年后; 另正式版本已经发布,项目中引用正式版本 yarn add --registry=https://registry.npmjs.org/ @ray-js/circle-progress@0.0.11

我发现组件内嵌CircleProgress后,组件中的变量值异常,例如useState set value后,值不更新;例如const unit = useProps(state => state)['temp_unit_convert']获取设备属性,属性变化后unit值不更新。

lshinylee
Posts: 331

Re: CircleProgress组件在iphone13&iOS16.1.1渐变色显示异常

在 render 的时候 console.log 打印 unit 确定是有更新值是吗?

另外建议 const unit = useProps(state => state)['temp_unit_convert'] 换成 const unit = useProps(state => state['temp_unit_convert'])

第一种写法会导致只要功能点的任何状态变更都会驱动该组件渲染。

:D :D :D

wink_li
Posts: 20

Re: CircleProgress组件在iphone13&iOS16.1.1渐变色显示异常

lshinylee 2025年 Feb 17日 09:40

在 render 的时候 console.log 打印 unit 确定是有更新值是吗?

另外建议 const unit = useProps(state => state)['temp_unit_convert'] 换成 const unit = useProps(state => state['temp_unit_convert'])

第一种写法会导致只要功能点的任何状态变更都会驱动该组件渲染。

以下是问题复现的例子,onTouchEnd中打印设备属性temp_c,永远都是视图最初加载时的属性值:

Code: Select all

import RayCircleProgress from '@ray-js/circle-progress';
import React, { useState } from 'react';
import {View} from '@ray-js/ray';
import { useActions, useProps } from "@ray-js/panel-sdk";
import styles from './test.module.less';

export function TestCircleProgress() {
    const actions = useActions();
    const temp_c = useProps(state => state)['temp_set']
    const [localTemp, setLocalTemp] = useState(0);

function progressToTemp(progress: number): number {
    return Math.floor(
        35 + (progress) * 30 / (100)
    )
}

return (
    <View className={styles.view}>
        <RayCircleProgress
            className={styles.circle}
            value={localTemp}
            ringRadius={135}
            innerRingRadius={111}
            startDegree={135}
            offsetDegree={270}
            onTouchMove={(value) => {
                setLocalTemp(value)
            }}
            onTouchEnd={(value) => {
                setLocalTemp(value)
                console.log('temp: ', temp_c)
                const temp = Math.floor(progressToTemp(value))
                actions['temp_set'].set(temp)
            }}
        />
    </View>
)
}
crisiron
Posts: 118

Re: CircleProgress组件在iphone13&iOS16.1.1渐变色显示异常

wink_li 2025年 Mar 13日 15:56
lshinylee 2025年 Feb 17日 09:40

在 render 的时候 console.log 打印 unit 确定是有更新值是吗?

另外建议 const unit = useProps(state => state)['temp_unit_convert'] 换成 const unit = useProps(state => state['temp_unit_convert'])

第一种写法会导致只要功能点的任何状态变更都会驱动该组件渲染。

以下是问题复现的例子,onTouchEnd中打印设备属性temp_c,永远都是视图最初加载时的属性值:

Code: Select all

import RayCircleProgress from '@ray-js/circle-progress';
import React, { useState } from 'react';
import {View} from '@ray-js/ray';
import { useActions, useProps } from "@ray-js/panel-sdk";
import styles from './test.module.less';

export function TestCircleProgress() {
    const actions = useActions();
    const temp_c = useProps(state => state)['temp_set']
    const [localTemp, setLocalTemp] = useState(0);

function progressToTemp(progress: number): number {
    return Math.floor(
        35 + (progress) * 30 / (100)
    )
}

return (
    <View className={styles.view}>
        <RayCircleProgress
            className={styles.circle}
            value={localTemp}
            ringRadius={135}
            innerRingRadius={111}
            startDegree={135}
            offsetDegree={270}
            onTouchMove={(value) => {
                setLocalTemp(value)
            }}
            onTouchEnd={(value) => {
                setLocalTemp(value)
                console.log('temp: ', temp_c)
                const temp = Math.floor(progressToTemp(value))
                actions['temp_set'].set(temp)
            }}
        />
    </View>
)
}

RayCircleProgress 是 来修改 localTemp 的值,跟你的dp下发实际上是隔离的,localTemp 的值跟手势的位置对应上,RayCircleProgress 就是正常的。
temp_c 值未改变可以通过 dp日志确认下你的 dp 是否发送成功

wink_li
Posts: 20

Re: CircleProgress组件在iphone13&iOS16.1.1渐变色显示异常

crisiron 2025年 Mar 13日 16:05
wink_li 2025年 Mar 13日 15:56
lshinylee 2025年 Feb 17日 09:40

在 render 的时候 console.log 打印 unit 确定是有更新值是吗?

另外建议 const unit = useProps(state => state)['temp_unit_convert'] 换成 const unit = useProps(state => state['temp_unit_convert'])

第一种写法会导致只要功能点的任何状态变更都会驱动该组件渲染。

以下是问题复现的例子,onTouchEnd中打印设备属性temp_c,永远都是视图最初加载时的属性值:

Code: Select all

import RayCircleProgress from '@ray-js/circle-progress';
import React, { useState } from 'react';
import {View} from '@ray-js/ray';
import { useActions, useProps } from "@ray-js/panel-sdk";
import styles from './test.module.less';

export function TestCircleProgress() {
    const actions = useActions();
    const temp_c = useProps(state => state)['temp_set']
    const [localTemp, setLocalTemp] = useState(0);

function progressToTemp(progress: number): number {
    return Math.floor(
        35 + (progress) * 30 / (100)
    )
}

return (
    <View className={styles.view}>
        <RayCircleProgress
            className={styles.circle}
            value={localTemp}
            ringRadius={135}
            innerRingRadius={111}
            startDegree={135}
            offsetDegree={270}
            onTouchMove={(value) => {
                setLocalTemp(value)
            }}
            onTouchEnd={(value) => {
                setLocalTemp(value)
                console.log('temp: ', temp_c)
                const temp = Math.floor(progressToTemp(value))
                actions['temp_set'].set(temp)
            }}
        />
    </View>
)
}

RayCircleProgress 是 来修改 localTemp 的值,跟你的dp下发实际上是隔离的,localTemp 的值跟手势的位置对应上,RayCircleProgress 就是正常的。
temp_c 值未改变可以通过 dp日志确认下你的 dp 是否发送成功

dp发送成功了,可看到日志,我的意思是,当我的视图使用了RayCircleProgress组件,就无法获取最新的值,例如useProps(state => state)['temp_set'],你可以试一下,我不清楚这是什么问题

wink_li
Posts: 20

Re: CircleProgress组件在iphone13&iOS16.1.1渐变色显示异常

crisiron 2025年 Mar 13日 16:05
wink_li 2025年 Mar 13日 15:56
lshinylee 2025年 Feb 17日 09:40

在 render 的时候 console.log 打印 unit 确定是有更新值是吗?

另外建议 const unit = useProps(state => state)['temp_unit_convert'] 换成 const unit = useProps(state => state['temp_unit_convert'])

第一种写法会导致只要功能点的任何状态变更都会驱动该组件渲染。

以下是问题复现的例子,onTouchEnd中打印设备属性temp_c,永远都是视图最初加载时的属性值:

Code: Select all

import RayCircleProgress from '@ray-js/circle-progress';
import React, { useState } from 'react';
import {View} from '@ray-js/ray';
import { useActions, useProps } from "@ray-js/panel-sdk";
import styles from './test.module.less';

export function TestCircleProgress() {
    const actions = useActions();
    const temp_c = useProps(state => state)['temp_set']
    const [localTemp, setLocalTemp] = useState(0);

function progressToTemp(progress: number): number {
    return Math.floor(
        35 + (progress) * 30 / (100)
    )
}

return (
    <View className={styles.view}>
        <RayCircleProgress
            className={styles.circle}
            value={localTemp}
            ringRadius={135}
            innerRingRadius={111}
            startDegree={135}
            offsetDegree={270}
            onTouchMove={(value) => {
                setLocalTemp(value)
            }}
            onTouchEnd={(value) => {
                setLocalTemp(value)
                console.log('temp: ', temp_c)
                const temp = Math.floor(progressToTemp(value))
                actions['temp_set'].set(temp)
            }}
        />
    </View>
)
}

RayCircleProgress 是 来修改 localTemp 的值,跟你的dp下发实际上是隔离的,localTemp 的值跟手势的位置对应上,RayCircleProgress 就是正常的。
temp_c 值未改变可以通过 dp日志确认下你的 dp 是否发送成功

请问复现此问题了吗

Post Reply