我的页面上有一个活动指示器,称为indicator
。我想对其进行动画处理,以使其遍历每种颜色。为此,我正在使用这种方法:
public static async Task ActivityIndicatorRainbow(ActivityIndicator indicator, int colorDelay)
{
for (double i = 0; i < 1; i += 0.01)
{
Color c = Color.FromHsla(i, 0.5, 0.5);
indicator.Dispatcher.BeginInvokeOnMainThread(()=> indicator.Color = c);
await Task.Delay(colorDelay);
}
}
并且在我的ButtonPressed方法中,我使用以下方法调用它:
activityIndicator.IsRunning = true;
await Task.Run(() => ActivityIndicatorRainbow(activityIndicator, 10));
在Android上运行正常,指示器在更改颜色时旋转。但是在iOS上,指标会保持不变,直到Rainbow Task完成,然后才开始旋转。
我已经尝试使用Device.InvokeOnMainThreadAsync()获得相同的结果
我已经在iOS Native平台上通过使用Objective-C每隔不到1秒钟更改颜色的方式进行了测试,它与Xamarin Forms出现相同的现象。然后,我认为iOS中的ActivityIndicator
每次少于一秒都不支持更改颜色。
因此,每1秒钟修改如下代码以更改颜色:
activityIndicator.IsRunning = true;
await Task.Run(() => ActivityIndicatorRainbow(activityIndicator, 1000));
如果需要不到一秒钟的时间在iOS中更改颜色,则可以尝试使用Navtive mtethod中的CADisplayLink或DispatchSource.Timer。