qt - 使用 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>)
}
推荐阅读
- kubernetes - 用模板中的新值替换值
- mapbox - 如何使用 MapBox 通过 ISO 代码突出显示区域
- javascript - 为什么我会收到“无法加载扩展程序。'content_security_policy' 的值无效”?
- node.js - 如何在 Heroku 中部署 React 作为前端和 Node 作为后端
- byte - ACR122U-A9 读取NFC卡7字节UID
- ansible - 如何调整角色依赖的ansible角色依赖中的变量?
- android - react native svg onpress 不适用于具有大 viewBox 的 android
- sql - 在 SQL Server 中创建数据透视表,如下例所示
- gitlab - 如何在 Gitlab 中按名称搜索所有组存储库中的文件
- java - Android Java底部导航栏片段未显示