UIBezierPath - 什么是单位半径

时间:2015-09-04 13:51:24

标签: ios swift uibezierpath

我正在编写Swift应用程序,我使用SDK Skobbler来操作地图。 该应用程序显示圆圈:

func displayCircle(x: Int, y: Int, radius: Int){...} //display circle in the map

此外,我检查用户是否在这个区域:

for area in self.areas {

            var c = UIBezierPath()

            let lat = area.getLatitude()
            let long = area.getLongitude()
            let radius = area.getRadius()/1000
            let center = CGPoint(x: lat, y: long)

            c.addArcWithCenter(center, radius: CGFloat(radius), startAngle: CGFloat(0), endAngle: CGFloat(360), clockwise: true)
            if c.containsPoint(CGPoint(x: currentLocation.latitude, y: currentLocation.longitude)) {
                //I AM IN THE AREA
            }else {
                //I AM NOT IN THE AREA
            }
            c.closePath()  
        }

当我在圈子里时,它可以工作,但是,当我在外面的圈子里它也有效......

我认为问题与单位半径有关

  • skobbler - >单位表
  • UIBezierPath - unit ???

感谢您的帮助

Ysee

2 个答案:

答案 0 :(得分:1)

iOS单位是点 在非视网膜设备中,1个点等于1个像素。 在视网膜设备(@ 2x)中,1个点等于两个像素。 在@ 3x设备(Iphone 6 plus)中,1点等于3个像素。

关心角度。单位是弧度而不是度。 因此,您需要将度数转换为弧度,您和角度应为2 * M_PI,对应于360度。您可以定义一个扩展来进行转换:

extension Int {
        var degreesToRadians : CGFloat {
             return CGFloat(self) * CGFloat(M_PI) / 180.0
        }
    }
    45.degreesToRadians   // 0.785398163397448

答案 1 :(得分:1)

不回答您的问题,但您应该使用CoreLocation函数执行该任务:

    let current = CLLocation(latitude: currentLocation.latitude, longitude: currentLocation.longitude)
    for area in self.areas {
        let center = CLLocation(latitude: CLLocationDegrees(area.getLatitude()), longitude: CLLocationDegrees(area.getLongitude()))
        if current.distanceFromLocation(center) <= CLLocationDistance(area.getRadius()) {
            //I AM IN THE AREA
        }
        else {
            //I AM NOT IN THE AREA
        }
    }