ios - Google Map iOS - 缩放动画在两部不同的手机(iPhone X 与 iPhone 7)上的工作方式不同
问题描述
这是我的方法:
private func animateCamera(lat: Double, long: Double, zoom: Float) {
DispatchQueue.main.async {
CATransaction.begin()
CATransaction.setValue(1, forKey: kCATransactionAnimationDuration)
let camera = GMSCameraPosition.camera(withLatitude: lat, longitude: long, zoom: zoom)
self.mapView.animate(to: camera)
CATransaction.commit()
}
}
我是这样称呼它的:
animateCamera(lat: obs.position.latitude, long: obs.position.longitude, zoom: 7)
缩放动画在 iPhone X 上运行。
另一方面,在 iPhone 7 上,缩放动画在完成时并不以我的目标点为中心(作为参数传递的纬度/经度)。
是因为屏幕分辨率不同吗?
我应该如何处理?
解决方案
尝试在相机位置方法上使用长格式初始化程序和更现代的方法来设置您的持续时间CATransaction
:
private func animateCamera(lat: Double, long: Double, zoom: Float) {
DispatchQueue.main.async {
CATransaction.begin()
CATransaction.setAnimationDuration(1)
CATransaction.setAnimationTimingFunction(CAMediaTimingFunction(controlPoints: 0.25, 0.75, 0.25, 1)) // you can add a timing curve too btw
self.mapView.animate(to: GMSCameraPosition.camera(withLatitude: lat, longitude: long, zoom: zoom, bearing: self.mapView.camera.bearing, viewingAngle: self.mapView.camera.viewingAngle))
CATransaction.commit()
}
}
这会在我的所有模拟器中产生相同的结果。
推荐阅读
- postman - 对散列结果的语法邮递员标题很热
- d3.js - 在 d3.js 中从嵌套对象转换为分层数据结构
- flutter - 在没有 android studio 的情况下在本地运行 Flutter Web 应用程序
- jquery - 使用 ajax 和 jquery-confirm.js 提交表单
- javascript - Javascript 中的键盘箭头键控件
- reactjs - 不匹配的路由使用 React Router 渲染
- javascript - 如何使用函数的输出?
- reactjs - 根据数组更改对象值
- jdbc - 如何使用 JDBC 连接器连接到 Vitess 数据库
- java - 如何使用时间轴在 JavaFX 中双击?