我正在使用注释和MapKit。我有一个自行车注释,默认图像指向东方(即,具有上,下,前,后概念的自行车侧视图)。如果自行车的CLLocation路线是向西的,则需要使用翻转的图像(即,图像指向西),否则自行车会向后行驶。为了避免注释图像过度“翻转”,我想在正北和正南有一个缓冲区,例如,如果自行车的路线是东(因此使用的图像是朝东的自行车图像),路线稍微偏西(例如184度),然后将其视为“在缓冲区内”,并且我不会在更新的注释上使用翻转后的图像。说缓冲区位于正北和正南两边的5度之间。我想在变量中捕获这些“方向”,即,有效的有效范围是5.0 .. <175,有效的缓冲区是范围175 .. <185,有效的有效范围是185 .. <355 ...但是我如何表示northBuffer ....有效范围应该是355到360,也必须是0到5,即不是连续的数字...我想这在数学上应该很简单,但是根本想不起来怎么做?
答案 0 :(得分:0)
如果我理解正确,则翻转发生在南北轴上。使用enum
进行翻转非常有用:
enum Direction { //image flipping
case left, right
}
您可以使用它来跟踪翻转状态
var direction: Direction = .right // east
课程是Double
,范围为0到360度。
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
是最后设置的区域。这意味着当您的路线从东向西移动时,仅当您通过缓冲区边界时,图像才会向西翻转。