动画轴承 属性 随 Qml Map 变化

Animating bearing property change with Qml Map

我正在尝试在 Qml 地图上为轴承 属性 变化设置动画:

Map {
    id: map
    Behavior on bearing {
        enabled: true
        RotationAnimation {
            direction: RotationAnimation.Shortest
            duration: 500
            easing.type: Easing.Linear
        }
    }

    Button {
        onClicked: map.bearing = 100 // animation works. Map rotation is animated
    }

    Button {
        onClicked: map.setBearing(100, Qt.point(10,10)) // animation does not work. Map rotates immediately to the bearing
    }
}

当直接使用 map.bearing 设置方位时,动画就会工作。但是当使用辅助方法 map.setBearing 时,动画不起作用。有没有办法用map.setBearing方法把动画搞定?

此致,

我敢打赌您需要另一个单独的 setBearing 可调用动画。 您在行为中拥有的那个不能涵盖您添加的用例,因为它在 属性 上运行,而 setBearing 重载严格来说会绕过 属性 并且仅在完成后触发更新的信号。

类似

        RotationAnimation {
            id: bearingAnimation
            target: <yourmap>
            property: "myBearing"
            direction: RotationAnimation.Shortest
            duration: 360

            function distance(a, b)
            {
                var mx = Math.max(a, b)
                var mn = Math.min(a, b)

                return Math.min( mx - mn, mn + 360 - mx)
            }

            function startBearingAnimation(to)
            {
                bearingAnimation.stop()
                bearingAnimation.from = <yourmap>.bearing
                bearingAnimation.to = to
                if (bearingAnimation.from  !== bearingAnimation.to) {
                    bearingAnimation.duration = distance(bearingAnimation.from, bearingAnimation.to) * 2
                    bearingAnimation.start()
                }
            }
        }

然后

    property real myBearing
    onMyBearingChanged {
         <yourmap>.setBearing(myBearing, <thepoint>)
    }