zoukankan      html  css  js  c++  java
  • 仿悦跑圈轨迹回放

    运动轨迹回放高德官方有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

  • 相关阅读:
    ztree——Cannot read property 'init' of undefined解决方案
    vue——手写swiper子组件,pagination不显示、轮播无效问题解决
    angularJS——数据更新了但是view(视图)层却未更新问题及解决方法
    vue——router.js动态注册组件
    js——ev || window.event,event.srcElement || event.target
    vue——keepAlive第一次无效问题及解决方法
    vue——列表页进详情页,第一次很慢,第二次就很快问题及解决方法
    vue——按需引入elementUI(以时间选择器为例)
    vue——预先指定高度,进行懒加载
    sql 分页查询
  • 原文地址:https://www.cnblogs.com/twodog/p/12137669.html
Copyright © 2011-2022 走看看