首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xamarin Forms:如何在Xamarin.iOS中使用UIViewPropertyAnimator

Xamarin Forms:如何在Xamarin.iOS中使用UIViewPropertyAnimator
EN

Stack Overflow用户
提问于 2021-09-22 22:18:31
回答 1查看 54关注 0票数 0

我想在Xamarin.iOS中使用UIViewPropertyAnimator,但我的项目实际上是Xamarin表单的一部分。我创建了一个依赖服务,并尝试了以下操作:

代码语言:javascript
复制
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问题。

在Xamarin表单中使用UIViewPropertyAnimator的正确方式是什么?

EN

回答 1

Stack Overflow用户

发布于 2021-09-23 08:34:56

在开始动画之前,首先设置它的初始变换,并且不要忘记在动画完成时通知Forms最后的更改。

请参阅以下代码

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69291906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档