迅速。代表北方向作为一系列航向

问题描述 投票:0回答:1

我正在使用注释和MapKit。我有一个自行车注释,其中默认图像指向东方(即具有上,下,前和后的概念的自行车的侧视图)。如果自行车的CLLocation路线是西边的,我需要使用翻转的图像(即图像朝西),否则自行车会向后移动。为了避免过度“翻转”注释图像,我希望在正北和正南方设置一个缓冲区,例如,如果自行车的路线是东方(因此使用的图像是朝东的自行车图像),当然转向西方(比如184度),然后这被认为是“在缓冲区内”,我没有在更新的注释上使用翻转图像。假设缓冲区在正北和正南的两侧各5度。我想在变量中捕获这些“方向”,即effectiveEast是范围5.0 .. <175,southBuffer是范围175 .. <185,effectiveWest是185 .. <355 ...但是我将如何代表northBuffer ....有效地需要从355到360以及从0到5的范围,即不连续的数字...我猜这应该是很简单的数学做,但只是想不出怎么样?

swift mapkit cllocation
1个回答
0
投票

如果我理解正确,翻转发生在南北轴上。有一个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是最后设置的。这意味着当您的路线从东向西移动时,只有当您通过缓冲区边界时,图像才会向西翻转。

© www.soinside.com 2019 - 2024. All rights reserved.