首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >斯威夫特。将向北方向表示为一系列路线方向

斯威夫特。将向北方向表示为一系列路线方向
EN

Stack Overflow用户
提问于 2018-09-11 07:56:54
回答 1查看 82关注 0票数 0

我正在使用注解和MapKit。我有一个自行车注释,其中默认图像指向东方(即自行车的侧视图,其中有向上,向下,前面和后面的概念)。如果自行车的CLLocation赛道是向西的,我需要使用翻转的图像(即指向西部的图像),否则自行车会向后行驶。为了避免注释图像的过度“翻转”,我想在正北和正南设置一个缓冲区,例如,如果自行车的路线是向东的(因此使用的图像是朝向东部的自行车图像),如果路线稍微向西倾斜(比如184度),那么这就被认为是“在缓冲区内”,我不会在更新的注释上使用翻转的图像。比方说缓冲区是正北和正南两侧的5度。我想在变量中捕捉这些“方向”,比如effectiveEast是range 5.0..<175,southBuffer是range 175..<185,effectiveWest是185..<355……但我该如何代表northBuffer ...它实际上需要是从355到360的范围,也是从0到5,即不连续的数字...我猜这在数学上应该是很简单的,但就是想不出怎么做?

EN

回答 1

Stack Overflow用户

发布于 2018-09-11 18:57:29

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

代码语言:javascript
复制
enum Direction {  //image flipping
   case left, right
}

您可以使用它来跟踪翻转状态

代码语言:javascript
复制
var direction: Direction = .right // east

该课程是一个从0度到360度的Double

代码语言:javascript
复制
var course = CLLocation.course

缓冲区是你喜欢的任何东西

代码语言:javascript
复制
var buffer:Double = 5 // 5 degrees each side of north or south 

您可以根据direction的当前状态设置图像翻转。

代码语言:javascript
复制
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是最后设置的区域。这意味着当你的路线从东向西移动时,只有当你通过缓冲区边界时,图像才会向西翻转。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52266928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档