首页 > 解决方案 > 迅速。将北向表示为航向方向的范围

问题描述

我正在使用注释和 MapKit。我有一个自行车注释,其中默认图像指向东方(即具有上、下、前和后概念的自行车的侧视图)。如果自行车的 CLLocation 路线在西方,我需要使用翻转的图像(即指向西方的图像),否则自行车会向后行驶。为了避免注释图像的过度“翻转”,我希望在正北和正南有一个缓冲区,例如,如果自行车的路线是东边(因此使用的图像是朝东的自行车图像),如果课程向西一点(比如 184 度),那么这被认为是“在缓冲区内”,我不会在更新的注释上使用翻转的图像。假设缓冲区在正北和正南两侧各 5 度。我想捕捉这些“方向”

标签: swiftmapkitcllocation

解决方案


如果我理解正确,翻转发生在南北轴上。enum有一个for 翻转很有用:

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


推荐阅读