• 仿悦跑圈轨迹回放


    运动轨迹回放高德官方有demo,但需要运动物实时居中

    代码在这里

    先上最后效果图

    创建CADisplayLink当作计时器,不要用NSTimer(不精确)

    frameInterval 帧间隔,相当于每隔多久刷新一次 (设置为1,代表1/60秒刷新一次,实例中设的是2帧)

      dpLink = CADisplayLink(target: self, selector: #selector(ViewController.update))
      dpLink?.frameInterval = minframeInterval
      dpLink?.isPaused = false
      dpLink?.add(to: RunLoop.current, forMode: RunLoopMode.commonModes)
    
    复制代码

    在update方法中持续改变地图中心,地图旋转角度,地图相机角度

      self.mapView.setCenter(traceCoordinates[uptateIndex+1], animated: false)
      self.mapView.setRotationDegree(CGFloat(yvAngle) , animated: false, duration: 1)
      self.mapView.setCameraDegree( CGFloat(yvAngle), animated: false, duration: 1)
    
    复制代码

    uptateIndex 每次加1,temporarytraceCoordinates临时存当前位置之前的所有值,polyline每次替换为后一条

     if  let line = self.polyline  {
         self.mapView.remove(line)
     }
     temporarytraceCoordinates.append(traceCoordinates[uptateIndex])
     polyline = MAPolyline(coordinates: &temporarytraceCoordinates, count: UInt(temporarytraceCoordinates.count))
    
    复制代码

    代理方法里改变线条颜色

    func mapView(_ mapView: MAMapView!, rendererFor overlay: MAOverlay!) -> MAOverlayRenderer! {
            if overlay.isKind(of: MAPolyline.self) {
                let renderer: MAPolylineRenderer = MAPolylineRenderer.init(polyline: overlay as! MAPolyline!)
                renderer.lineWidth = 8.0
                renderer.strokeColor = UIColor(red: 0, green: 230, blue: 239, alpha: 1)
                return renderer
            }
            return nil
     }
    复制代码

    poiAnnotationView?.image 设置运动物体的图片

        func mapView(_ mapView: MAMapView, viewFor annotation: MAAnnotation) -> MAAnnotationView? {
            
            if annotation.isEqual(myLocation) {
                let annotationIdentifier = "myLcoationIdentifier"
                var poiAnnotationView = mapView.dequeueReusableAnnotationView(withIdentifier: annotationIdentifier)
                if poiAnnotationView == nil {
                    poiAnnotationView = MAAnnotationView(annotation: annotation, reuseIdentifier: annotationIdentifier)
                }
                poiAnnotationView?.image = UIImage(named: "userHeadimage")
                poiAnnotationView?.imageView.layer.cornerRadius = 20
                poiAnnotationView?.imageView.layer.masksToBounds = true
                poiAnnotationView?.imageView.backgroundColor = UIColor.white
                poiAnnotationView?.imageView.layer.borderColor = UIColor.white.cgColor
                poiAnnotationView?.imageView.layer.borderWidth = 2
                poiAnnotationView!.canShowCallout = false
                return poiAnnotationView
            }
            return nil
        }
    
    复制代码

    发现bug或好的建议欢迎 issues or Email Yvente@163.com

  • 相关阅读:
    HDU 5818 Joint Stacks
    HDU 5816 Hearthstone
    HDU 5812 Distance
    HDU 5807 Keep In Touch
    HDU 5798 Stabilization
    HDU 5543 Pick The Sticks
    Light OJ 1393 Crazy Calendar (尼姆博弈)
    NEFU 2016省赛演练一 I题 (模拟题)
    NEFU 2016省赛演练一 F题 (高精度加法)
    NEFU 2016省赛演练一 B题(递推)
  • 原文地址:https://www.cnblogs.com/twodog/p/12137672.html
Copyright © 2020-2023  润新知