|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
如果你现在开始学到编出像样的APPiOS5可能已经普及了可以直接用ARC(另之前对ARC的了解很粗浅现在开发程序完全可以直接ARCiOS4不支持的weak是有办法替代的用unsafe_unretained在列入奔腾马拉松的时分,小组的项目构想是基于挪动交际收集做一个纪录用户旅游轨迹和照片的APP使用。
即当用户在旅游过程当中,手时机不中断的上报GPS坐标到服务器,服务器会保留一切坐标到数据库,然后用户翻开本人的旅纪行录后,我们会在手机上创立一个全屏的舆图,经由过程服务器CGI猎取一切GPS的坐标点,然后经由过程这些坐标点绘制出一条线。
同时,我们还能够在舆图上打上一些锚点来纪录用户的乐趣点,如宣布心境、宣布旅游的所见所闻、宣布顺手拍等等。点击锚点还会呈现一个气泡,即可以检察响应的信息,点击检察demo。以下图所示:
<br>
手艺细节简介
- 下面的界面展现效果都是基于HTMLCSSJS的,如许的优点是不必要体贴手机硬件和操纵体系差别,究竟如今几近一切的操纵体系都撑持HTML5尺度。
- 在此次项目中我利用的JQ1.9.1,次要用来简化JS的誊写和兼容PC。
- 再就是GoogleMapsAPI3v,这是谷歌最新的舆图API,利用起来十分复杂,文档和示例也十分多。
接上去我们看看怎样经由过程以上手艺StepbyStep构建这个用户轨迹和乐趣点展现页面。这里次要是基于PC真个页面先容,挪动真个兼容会在前面详细申明。
Step1创立GoogleMap
<br>
如上图先创立一个舆图:包含初始化设置(mapOptions),和New一个GoogleMap对象传进我们必要衬着的DIV元素。上面是参数注释:
zoom是翻开舆图的缩小倍数,缩小倍数也许在1-13之间,有些中央没法到达10以上的倍数;
center是初始化中央点坐标;
mapTypeId是接纳的舆图范例,好比公路舆图仍是卫星舆图;
mapTypeControl、panControl、zoomControl、streetViewControl这些都是我们翻开默许的谷歌舆图的时分右边浮动显现的那些操纵工具,好比舆图范例把持器,舆图挪动把持器,舆图倍数把持器,街区查询把持器,在这个项目中不必要这些把持器,以是全体给它设置的false封闭了。最初运转效果以下所示:
<br>
依据我们传进的初始化参数,也许的中央点就是中国的恩施,缩小倍数方才好扫瞄乡村省分。接上去我们看看怎样在这个舆图上画出一条旅游线路和安排一些锚点。
Step2盘算轨迹和安排锚点
<br>
如上代码所示:假定data是我们从服务器那儿猎取的一个GPS坐标数组。
1、起首,我们创立一个经纬度局限对象,将这些点都放到这个对象中往;
2、然后再放到一个coordinates数组中;
3、我们能够用Polyline对象和这些GPS数组在舆图上画一条线,再经由过程经纬度局限对象盘算一切点的中央点坐标和一个符合的缩小倍数;
4、线画完后,我们能够经由过程谷歌供应Marker对象将一个GPS锚点放到舆图上往,这个锚点也是用户宣布的形态的一个乐趣点。
用户想看哪个乐趣的内容只必要点击或则触摸一下这个锚点便可冒出一个气泡信息,以下图所示,这个跟iPhone的相册舆图是相似
<br>
Step3气泡展现:
在这里因为谷歌API没有供应跟营业相干的气泡类,以是这里的气泡是自界说的,也许的思绪就是一个相对定位的DIV对象,然后经由过程谷歌的API将坐标换算成全部舆图DIV的X坐标和Y坐标,因为自界说代码对照长以是,以是在此不具体申明,详细代码能够检察demo里的directions.js文件。我们间接运转这些代码,效果以下图所示:
<br>
<br>
step4挪动端优化
挪动设备上的幻灯片通常为人机交互的,也就是用户经由过程手指来自动或半主动的关照幻灯片是不是切换,这个时分我们就用到了touchstart、touchmove、touchend三个事务,当产生touchstart的时分我们必要纪录入手下手坐标,然后用户在一直的滑动的时分touchmove工夫会不中断地触发,这个时分再次经由过程事务的坐标盘算图片容器的地位,当滑动停止后touchend事务会被触发,这个时分全部用户操纵历程停止,次要代码以下所示:
<br>
固然这个历程固然很复杂,可是算法仍是对照庞大的,比方我们用iPhone相册的时分,会呈现以下几种情况:
1、触摸工夫假如十分短,不论滑动间隔有多长,图片城市被切换到下一张,
2、假如工夫对照迟缓,触摸的间隔假如小于屏幕宽度的一半,图片则会回回初始地位。
3、假如年夜于屏幕宽度的一样平常,则主动滑动到下一张。
继承自相应的不可变类比如NSMutableArray继承自NSArray他们都添加了可以改变对象内容的方法比如-(void)addObject:(id)anObject添加对象-(void)removeObject:(id)anObject删除对象上面只是一个大概的总结 |
|