迅速。将北方方向表示为航向范围

时间:2018-09-10 23:56:54

标签: swift mapkit cllocation

我正在使用注释和MapKit。我有一个自行车注释,默认图像指向东方(即,具有上,下,前,后概念的自行车侧视图)。如果自行车的CLLocation路线是向西的,则需要使用翻转的图像(即,图像指向西),否则自行车会向后行驶。为了避免注释图像过度“翻转”,我想在正北和正南有一个缓冲区,例如,如果自行车的路线是东(因此使用的图像是朝东的自行车图像),路线稍微偏西(例如184度),然后将其视为“在缓冲区内”,并且我不会在更新的注释上使用翻转后的图像。说缓冲区位于正北和正南两边的5度之间。我想在变量中捕获这些“方向”,即,有效的有效范围是5.0 .. <175,有效的缓冲区是范围175 .. <185,有效的有效范围是185 .. <355 ...但是我如何表示northBuffer ....有效范围应该是355到360,也必须是0到5,即不是连续的数字...我想这在数学上应该很简单,但是根本想不起来怎么做?

1 个答案:

答案 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是最后设置的区域。这意味着当您的路线从东向西移动时,仅当您通过缓冲区边界时,图像才会向西翻转。