如何使swift中的谷歌地图瓷砖可用

时间:2015-10-29 16:42:04

标签: swift google-maps ios9 google-maps-sdk-ios

我正在使用ios9中的谷歌地图sdk,我目前正在地图上显示具有代表值的不同颜色的切片图层。我想添加点击图块的功能,并显示有关图块的信息,例如该图块的实际值。我在线查看,我发现的唯一的事情是为每个瓷砖制作透明标记,然后为每个标记写一个处理程序来显示值,但我认为必须有一个更有效的方法来做到这一点。有人能引导我朝着正确的方向前进吗?谢谢!

class MyMapView: UIView{

var myMap: GMSMapView!
var closestPoint: CLLocationCoordinate2D!

required init?(coder aDecoder: NSCoder) {
    fatalError("This class does not support NSCoding")
}


init(closestPoint: CLLocationCoordinate2D!){
    super.init(frame: CGRectZero)

    self.backgroundColor = UIVariables.blackOpaque

    self.closestPoint = closestPoint

    var camera = GMSCameraPosition.cameraWithLatitude(AppVariables.location2D!.latitude, longitude: AppVariables.location2D!.longitude, zoom: 6)
    self.myMap = GMSMapView.mapWithFrame(CGRectZero, camera: camera)
    self.myMap.mapType = GoogleMaps.kGMSTypeSatellite

    delay(seconds: 0.5) { () -> () in

        let path = GMSMutablePath()
        path.addCoordinate(self.closestPoint!)
        path.addCoordinate(AppVariables.location2D!)
        let bounds = GMSCoordinateBounds(path: path)
        self.myMap.moveCamera(GMSCameraUpdate.fitBounds(bounds, withPadding: 50.0))

        let layer = MyMapTileLayer()
        layer.map = self.myMap
    }

    self.myMap.translatesAutoresizingMaskIntoConstraints = false
    //self.frame = CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, 400)

    self.addSubview(self.myMap)



    let viewsDictionary = ["map": self.myMap]
    let metricDictionary = ["width": self.frame.size.width/2]


    let view_constraint_V1:Array = NSLayoutConstraint.constraintsWithVisualFormat("V:|[map]-15-|", options: NSLayoutFormatOptions.AlignAllLeading, metrics: metricDictionary, views: viewsDictionary)

    let view_constraint_H1:Array = NSLayoutConstraint.constraintsWithVisualFormat("H:|-10-[map]-10-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: metricDictionary, views: viewsDictionary)

    self.addConstraints(view_constraint_V1)
    self.addConstraints(view_constraint_H1)
}

func delay(seconds seconds: Double, completion:()->()) {
    let popTime = dispatch_time(DISPATCH_TIME_NOW, Int64( Double(NSEC_PER_SEC) * seconds ))

    dispatch_after(popTime, dispatch_get_main_queue()) {
        completion()
    }
}

override func awakeFromNib() {
    super.awakeFromNib()

    // Initialization code
}

}


class MyTileLayer: GMSTileLayer{
var webService = WebService()

override func requestTileForX(x: UInt, y: UInt, zoom: UInt, receiver: GMSTileReceiver!) {

    webService.getTiles(x, y: y, z: zoom, completion: { (result) -> Void in

        receiver.receiveTileWithX(x, y: y, zoom: zoom, image: UIImage(data: result))
    })
}

}

0 个答案:

没有答案
相关问题