【问题标题】:How to Continue Transform/Rotation? - Dart/Flutter如何继续变换/旋转? - 飞镖/颤振
【发布时间】:2019-06-03 11:54:52
【问题描述】:

我在 dart/Flutter 中使用 Transform.Rotate 时遇到了一些问题。 我已经设置了我的代码,以便我可以用手势旋转图像。但是,一旦我将图像旋转一次并松开并继续旋转,图像就会重置回其原始位置。

与此处显示的问题相同:Rotation gesture produces undesired rotation

这里的解决方案是将转换保存在一个变量中。有什么方法可以将转换保存在 Dart/Flutter 中的变量中?

另外,理想的情况是我可以对旋转进行一点动画处理,因此它会稍微延迟,因为现在它会立即响应旋转。如果这部分不清楚,请告诉我!

欢迎提出建议!!!

【问题讨论】:

    标签: android ios dart drag-and-drop flutter


    【解决方案1】:

    您基本上想要保存小部件的状态,所以我认为您需要将它包装在 StatefulWidget 中才能做到这一点。 (https://www.youtube.com/watch?v=AqCMFXEmf3w)

    要平滑动画,您可以尝试使用 AnimatedContainer 吗? 我自己没有使用它,但我认为它应该是你需要的! (https://www.youtube.com/watch?v=yI-8QHpGIP4)

    编辑

    好的,我已经为你工作了。

    Offset vector;
      double startingAngle;
      double deltaAngle = 0.0;
      double finalAngle = 0.0;
      // store the final angle of the object
      double finalObjectAngle = 0.0;
    
    
      void _onPanStart(DragStartDetails details) {
        _polarCoordFromGlobalOffset(details.globalPosition);
        startingAngle = vector.direction;
        print('START = $startingAngle ===================================');
      }
    
      void _onPanUpdate(DragUpdateDetails details) {
        _polarCoordFromGlobalOffset(details.globalPosition);
    
        setState(() {
          // HERE you should use the finalObjectAngle
          deltaAngle = vector.direction - startingAngle + finalObjectAngle;
          finalAngle = deltaAngle;
        });
      }
    
      void _onPanEnd(DragEndDetails details) {
        finalAngle = deltaAngle;
        // Save the finalAngle of the object
        finalObjectAngle = finalAngle;
        print('End = $finalAngle ===================================');
      }
    

    【讨论】:

    • 您好,感谢您的回复!我已经调整了我的代码,所以这一切都在一个有状态的小部件中,但它仍然没有达到预期的效果。您介意下载该项目并查看它是否正确实施吗?
    • 您的旋转对象的角度由finalAngle 决定。在onPanUpdate 中,您可以通过angle - startingAngle 进行设置。
    • 并且当旋转开始时,startingAngle 得到一个值,该值与旋转开始时的角度值相同,因此显然它被设置为 0 弧度。但是,如果它将变换保存为新的锚点,那将是什么。所以无论旋转结束应该是新的“0”角。在 Swift 中保存此转换的方法是通过例如“tempTransform = rotateImageView.transform”参见link 但我在 Flutter 中找不到执行此操作的方法。
    • 你先生!值得喝啤酒!!太感谢了!我会确保你得到那瓶啤酒:)
    猜你喜欢
    • 2022-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    相关资源
    最近更新 更多