我正在使用注解和MapKit。我有一个自行车注释,其中默认图像指向东方(即自行车的侧视图,其中有向上,向下,前面和后面的概念)。如果自行车的CLLocation赛道是向西的,我需要使用翻转的图像(即指向西部的图像),否则自行车会向后行驶。为了避免注释图像的过度“翻转”,我想在正北和正南设置一个缓冲区,例如,如果自行车的路线是向东的(因此使用的图像是朝向东部的自行车图像),如果路线稍微向西倾斜(比如184度),那么这就被认为是“在缓冲区内”,我不会在更新的注释上使用翻转的图像。比方说缓冲区是正北和正南两侧的5度。我想在变量中捕捉这些“方向”,比如effectiveEast是range 5.0..<175,southBuffer是range 175..<185,effectiveWest是185..<355……但我该如何代表northBuffer ...它实际上需要是从355到360的范围,也是从0到5,即不连续的数字...我猜这在数学上应该是很简单的,但就是想不出怎么做?
发布于 2018-09-11 18:57:29
如果我理解正确的话,翻转发生在南北轴上。拥有一个用于翻转的enum是很有用的:
enum Direction { //image flipping
case left, right
}您可以使用它来跟踪翻转状态
var direction: Direction = .right // east该课程是一个从0度到360度的Double。
var course = CLLocation.course缓冲区是你喜欢的任何东西
var buffer:Double = 5 // 5 degrees each side of north or south 您可以根据direction的当前状态设置图像翻转。
func setImage(_ course: course) {
switch(direction){
case .right: // east
if(course < 360 - buffer || course > 180 + buffer){
direction = .left
// flip image to left
}
case .left: // west
if(course > buffer || course < 180 - buffer){
direction = .right
// flip image to right
}
}
}注意,有一个由buffer创建的死区,例如,正北355度到5度之间,其中direction是最后设置的区域。这意味着当你的路线从东向西移动时,只有当你通过缓冲区边界时,图像才会向西翻转。
https://stackoverflow.com/questions/52266928
复制相似问题