- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我将 Google SDK 用于应用程序 iOS8 (Swift)。我想用根据智能手机方向旋转的箭头替换 GMSMapView 中的蓝点(我的位置)。我该怎么做?
编辑:
我设法看到了我的箭头,但我遇到了三个问题:
1 : 箭头被切断了,我没有发现扩大区域
2 : 箭头的位置不在我的位置我通过删除“0,5”来解决这个问题:
CGContextTranslateCTM(context, size.width, size.height)
3 : 箭头的方向与原来对称我通过在“度”前加“-”来解决这个问题:
CGContextRotateCTM(context, CGFloat(DegreesToRadians(Double(-degrees))))
如何解决这些问题?
最佳答案
如果您使用的是 Google Maps iOS SDK,似乎有 no way to replace默认用户位置图标。然而,默认图标已经有一个箭头指示用户前进的方向(只需调用 mapView.myLocationEnabled = true
)。
解决方法是在用户当前位置放置一个标记,并根据航向更改标记图像。
示例代码(the full source code):
func RadiansToDegrees(radians: Double) -> Double {
return radians * 180.0/M_PI
}
func DegreesToRadians(degrees: Double) -> Double {
return degrees * M_PI / 180.0
}
var GeoAngle = 0.0
var locationManager = CLLocationManager()
var marker = GMSMarker()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
var camera = GMSCameraPosition.cameraWithLatitude(-33.86,
longitude: 151.20, zoom: 6)
var mapView = GMSMapView.mapWithFrame(CGRectZero, camera: camera)
self.view = mapView
marker.map = mapView
locationManager.delegate = self
locationManager.requestAlwaysAuthorization()
locationManager.startUpdatingLocation()
locationManager.startUpdatingHeading()
}
func locationManager(manager: CLLocationManager!, didUpdateToLocation newLocation: CLLocation!, fromLocation oldLocation: CLLocation!) {
var camera = GMSCameraPosition.cameraWithLatitude(newLocation.coordinate.latitude,
longitude: newLocation.coordinate.longitude, zoom: 15)
(self.view as GMSMapView).animateToCameraPosition(camera)
GeoAngle = self.setLatLonForDistanceAndAngle(newLocation)
marker.position = newLocation.coordinate
}
func locationManager(manager: CLLocationManager!, didUpdateHeading newHeading: CLHeading!) {
var direction = -newHeading.trueHeading as Double
marker.icon = self.imageRotatedByDegrees(CGFloat(direction), image: UIImage(named: "arrow.png")!)
}
func imageRotatedByDegrees(degrees: CGFloat, image: UIImage) -> UIImage{
var size = image.size
UIGraphicsBeginImageContext(size)
var context = UIGraphicsGetCurrentContext()
CGContextTranslateCTM(context, 0.5*size.width, 0.5*size.height)
CGContextRotateCTM(context, CGFloat(DegreesToRadians(Double(degrees))))
image.drawInRect(CGRect(origin: CGPoint(x: -size.width*0.5, y: -size.height*0.5), size: size))
var newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
}
func setLatLonForDistanceAndAngle(userLocation: CLLocation) -> Double {
var lat1 = DegreesToRadians(userLocation.coordinate.latitude)
var lon1 = DegreesToRadians(userLocation.coordinate.longitude)
var lat2 = DegreesToRadians(37.7833);
var lon2 = DegreesToRadians(-122.4167);
var dLon = lon2 - lon1;
var y = sin(dLon) * cos(lat2);
var x = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(dLon);
var radiansBearing = atan2(y, x);
if(radiansBearing < 0.0)
{
radiansBearing += 2*M_PI;
}
return radiansBearing;
}
关键的一步是根据来自func locationManager(manager: CLLocationManager!, didUpdateHeading newHeading: CLHeading!)
方法的度数改变图像。
您还需要确保在您的 info.plist
文件中添加 NSLocationAlwaysUsageDescription
和 NSLocationWhenInUseUsageDescription
。
关于ios - 用箭头替换 GMSMapView 中的蓝点 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28988038/
是否可以利用为蓝/绿部署正确设置的环境来进行验收测试? 您认为那里有哪些优势/风险? 基本上我会想象一个绿色环境将用于运行一些验收测试。如果通过,则将流量切换为绿色并继续执行常规的蓝/绿方案。 谢谢!
我正在尝试使用 Cloudformation Codedeploy 蓝/绿部署功能,因此有一个如下所示的任务集。 TaskSet: Type: AWS::ECS::TaskSet Proper
在我的 Cloudformation 模板中,我使用蓝绿部署触发器并具有以下任务定义 TaskDefinition: Type: AWS::ECS::TaskDefinition Depend
光色和油漆之间存在不匹配:物理学家会说三种原色是红色、绿色和蓝色,而画家会给出红色、蓝色和黄色作为原色。事实上,当用水彩绘画时,你不能将红色、绿色和蓝色混合成黄色,而不会混合橙色,你只会得到棕色。 这
我得到了一个本质上是图像的数据集,但是图像中的每个像素都表示为从 -1 到 1 的值。我正在编写一个应用程序,它需要将这些 -1 到 1 灰度值映射到 MATLAB“Jet”色标(红-绿-蓝颜色渐变)
如何在 BufferedImage 中隔离红/绿/蓝 channel :我有以下代码不起作用:` public static BufferedImage isolateChannel(Buffered
我正在尝试使用 CloudFormation 和 ECS 服务来部署新堆栈,并使用 CodeDeploy 启动类型来启用蓝/绿部署。 在 User Guide为了通过 CloudFormation 执
当上游容器之一出现故障时,如何让 dockerized nginx 快速进行故障转移?在非 Docker 环境中,故障转移似乎是瞬时的,但在 Docker 化时,多个请求会超时。 我在同一 Node
AWS CloudFormation 是否支持 EC2 的蓝/绿部署?我能够使用 CodeDeploy for EC2 创建蓝/绿部署;但是,我不知道如何使用 CloudFormation 创建一个。
我想创建一个 CodePipeline,它从 CodeCommit 源构建一个容器镜像,然后以蓝/绿方式将新镜像部署到我的 ECS 服务(EC2 启动类型)。 源阶段是CodeCommit,已经包含了
我正在尝试通过 CloudFormation 创建 ECS 蓝/绿部署设置。我发现这个文档提到 ECS 蓝/绿部署可以由 CloudFormation 处理,而无需显式创建 CodeDeploy 应用
我是一名优秀的程序员,十分优秀!