xamarin - Xamarin 窗体:如何在 Xamarin.iOS 中使用 UIViewPropertyAnimator
问题描述
我想UIViewPropertyAnimator
在 Xamarin.iOS 中使用,但我的项目实际上是 Xamarin Forms 的一部分。我创建了一个依赖服务并尝试了以下操作:
var renderer = Platform.GetRenderer(view);
var uiCubicTimingParameters = new UICubicTimingParameters(new CGPoint(x: 0.4, y: 0), new CGPoint(x: 0.2, y: 1));
var uiViewPropertyAnimator = new UIViewPropertyAnimator(duration, uiCubicTimingParameters);
uiViewPropertyAnimator.AddAnimations(() =>
{
renderer.NativeView.Transform = CGAffineTransform.MakeTranslation(300, 0);
});
uiViewPropertyAnimator.StartAnimation();
这种方法的问题在于它直接更新本机视图,但 Xamarin Forms 视图不再同步。因此,我注意到一些奇怪的 UI 问题。
UIViewPropertyAnimator
在 Xamarin Forms 的情况下,正确的使用方法是什么?
解决方案
在开始动画之前,首先设置它的初始Transform,并且不要忘记Forms
在动画完成时通知最终的变化。
参考以下代码
public async Task TranslateViewAsync(View view)
{
var finished = false;
CoreFoundation.DispatchQueue.MainQueue.DispatchAsync(() =>
{
var renderer = Platform.GetRenderer(view);
renderer.NativeView.Transform = CGAffineTransform.MakeTranslation(375, 0);
var uiViewPropertyAnimator = new UIViewPropertyAnimator(0.3, UIViewAnimationCurve.EaseOut, () =>
{
renderer.NativeView.Transform = CGAffineTransform.MakeTranslation(0, 0);
});
uiViewPropertyAnimator.AddCompletion(p =>
{
finished = true;
});
uiViewPropertyAnimator.StartAnimation();
});
while (!finished)
await Task.Delay(10);
}
请参阅https://github.com/xamarin/Xamarin.Forms/issues/6999#issuecomment-542488010。
推荐阅读
- node.js - 为什么 ts-node index.ts 不起作用,但 ts-node 通过 npm run 起作用?
- python - 数据框嵌套字典到多索引数据框
- javascript - 如何使用 JavaScript 替换 span 标签内的属性?
- python - 而将sql查询转换为json得到错误的输出
- python - Scrapy/Selenium - driver.get_cookies() 返回错误的 cookie(对于与 start_urls 不同的 url)
- flutter - 为什么缺少 awsconfiguration.json 文件?
- python - 如何运行具有特定持续时间的函数?
- javascript - 同一页面中两个元素之间的链接不起作用
- python - 连接到 Python websockets 时出现 Ktor MalformedInputException
- python - 从 Google 云存储桶运行 Eleuther AI GPT 模型