注册 登录
主题 : 最近做了个地图软件,写一些经验和心得,以及一些问题
级别: 圣骑士

UID: 2228
精华: 4
发帖: 73
可可豆: 7020 CB
威望: 7020 点
在线时间: 501(时)
注册时间: 2009-02-16
最后登录: 2014-10-30
0 楼:  发表于: 2010-04-08 16:36    发自: Web Page

最近做了个地图软件,写一些经验和心得,以及一些问题   

管理提醒: 本帖被 gagaga 设置为精华(2010-04-08)
这个软件的源码在此:
http://www.cocoachina.com/bbs/read.php?tid=19117

1,看到很多人问如何计算两点之间的距离,其实很简单哎。
准备两个CLLocation的对象,比如要计算某个位置与使用者当前位置的距离,则其中一个CLLocation是userLocation = [locationManager location],locationManager是CLLocationManager的实例,并已执行[locationManager startUpdatingLocation];
然后计算这两个CLLocation的距离(已格式化成12.34 km):
复制代码
  1. [NSString stringWithFormat:@"%0.2f km",[userLocation getDistanceFrom:location]/1000]


2,在处理MKAnnotationView时,都要判断对应annotation是不是MKUserLocation这个显示用户当前位置的蓝点,以避免误操作。
复制代码
  1. [annotation isKindOfClass:[MKUserLocation class]]


3,- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
这个delegate函数一般会在给MKMapView对象添加annotations后马上执行,但执行不会马上结束。如果在它完成之前就调用
[mapView viewForAnnotation:someAnnotation];的话,会返回nil的结果,这时对这个返回的nil做任何操作都不会在屏幕上显示……

4,MKMapView放大缩小时,需要注意的是放大,至少放大2倍以上才会被执行。
复制代码
  1. - (IBAction)doZoomIn:(id)sender{//放大
  2.     MKCoordinateRegion region = mMapView.region;
  3.     region.span.latitudeDelta=region.span.latitudeDelta * 0.4;
  4.     region.span.longitudeDelta=region.span.longitudeDelta * 0.4;
  5.     [mapView setRegion:region animated:YES];
  6. }
  7. - (IBAction)doZoomOut:(id)sender{//缩小
  8.     MKCoordinateRegion region = mMapView.region;
  9.     region.span.latitudeDelta=region.span.latitudeDelta * 1.3;
  10.     region.span.longitudeDelta=region.span.longitudeDelta * 1.3;
  11.     [mapView setRegion:region animated:YES];
  12. }


5,下面随便列一些其他没提到的代码,供搜索引擎搜索
复制代码
  1. CLLocationCoordinate2D coordinate;
  2. //Location Paris
  3. coordinate.latitude = 48.856660;
  4. coordinate.longitude = 2.350996;
  5. MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(coordinate, distance, distance);
  6. MKCoordinateRegion adjustedRegion = [mapView regionThatFits:viewRegion];
  7. [mapView setRegion:adjustedRegion animated:animated];


6,问题:
发现MKAnnotationView的Callout View有bug。
我在后台更新subtitle后,若不手动点一下其他MKAnnotationView再点回之前已经显示Calloutview的MKAnnotationView的话,那这个MKAnnotationView的Calloutview里的subtitle就不会被更新……
说清楚点就是:点了某个大头针显示信息后,若这时后台更新了它的subtitle,然后你再点这个大头针会发现它的subtitle显示成了一个空白。这时得点一下其他大头针,再点回来,原来那个大头针的信息才是完整的。
虽然有个notification是MKAnnotationCalloutInfoDidChangeNotification,但SDK手册里说这个已经不能用了。我尝试用了一下也没有任何效果……
不知道还有其他方法没

后面同学回答在此
引用
引用第22楼cjlin于2010-06-02 23:45发表的  :
回一下第6個問題...
如果用戶選上的是mkav,那...
if(mkav.selected)
{
    [mkav setSelected:NO];
    [mkav setSelected:YES];
}
這樣就會更新subtitle了[url=job.php?action=topost&tid=17969&pid=138830][/url]

[ 此帖被bobgreen在2010-08-11 21:06重新编辑 ]

级别: 精灵王

状态: 连续签到 - [20天]
UID: 349
精华: 6
发帖: 108
可可豆: 13228 CB
威望: 13203 点
在线时间: 2272(时)
注册时间: 2008-07-29
最后登录: 2019-01-10
1 楼:  发表于: 2010-04-08 16:39    发自: Web Page
不用MapKit的飘过

Some rather naïve people assume that I learned from a book, still others even think I took a class to learn all of this! I can say definitively that it’s in my opinion that to be a great iOS developer, you just need to write apps, and lots of them. Experiment, try different things out. (from: http://nachbaur.com/)
级别: 精灵王

UID: 2236
精华: 5
发帖: 214
可可豆: 34631 CB
威望: 34633 点
在线时间: 2353(时)
注册时间: 2009-02-17
最后登录: 2016-08-17
2 楼:  发表于: 2010-04-08 16:40    发自: Web Page
tpp也曾经遇到和bob兄同样的问题,期待高人来解答
级别: 精灵王

UID: 2236
精华: 5
发帖: 214
可可豆: 34631 CB
威望: 34633 点
在线时间: 2353(时)
注册时间: 2009-02-17
最后登录: 2016-08-17
3 楼:  发表于: 2010-04-08 16:42    发自: Web Page
另外,要调用
[mapView viewForAnnotation:someAnnotation];
这种涉及annotation的方法的话,最好在
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
这个delegate里面设一个标志位,以免出现上面bob兄所说的返回nil的问题
级别: 版主

状态: 连续签到 - [144天]
UID: 491
精华: 6
发帖: 1766
可可豆: 112205 CB
威望: 112852 点
在线时间: 8537(时)
注册时间: 2008-08-19
最后登录: 2019-02-28
4 楼:  发表于: 2010-04-08 17:08    发自: Web Page
引用
引用第1楼透明de面具于2010-04-08 04:39 PM发表的  :
不用MapKit的飘过



口可    口可,  又又   票风  ~~ 又又   票风~~
 Developer
------------------------------------------------------------
Η αγάπη ποτέ δεν αποτυγχάνει.
愛是永不止息。
Love never fails.

    --《圣经.新约》哥林多前书第13章
级别: 圣骑士

UID: 2228
精华: 4
发帖: 73
可可豆: 7020 CB
威望: 7020 点
在线时间: 501(时)
注册时间: 2009-02-16
最后登录: 2014-10-30
5 楼:  发表于: 2010-04-08 17:16    发自: Web Page
引用
引用第3楼lawrencewu于2010-04-08 09:42发表的  :
另外,要调用
[mapView viewForAnnotation:someAnnotation];
这种涉及annotation的方法的话,最好在
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
这个delegate里面设一个标志位,以免出现上面bob兄所说的返回nil的问题

果然,我把刷新的线程放到这里后就没问题了~多谢指导~
之前我用了其他迂回的方法以避免问题,暂时不更新商店里的版本了……

引用
引用第4楼lvyile于2010-04-08 10:08发表的  :
口可    口可,  又又   票风  ~~ 又又   票风~~

引用
引用第1楼透明de面具于2010-04-08 09:39发表的  :
不用MapKit的飘过

面具兄,吕兄
不用MapKit,不知是否WebView+Google Map API?不知是否可以实现如图所示的功能
岂不是可以兼容3.0以前的系统?
愿闻其详~
图片:mzl.miqcipvu.png
图片:mzl.ksxvnryd.png
级别: 新手上路
UID: 7246
精华: 0
发帖: 9
可可豆: 540 CB
威望: 540 点
在线时间: 263(时)
注册时间: 2009-07-23
最后登录: 2012-04-26
6 楼:  发表于: 2010-04-08 17:20    发自: Web Page
回 5楼(bobgreen) 的帖子
惊见巴黎地图,LZ莫非身在法国?

这Annotation满的...
  
级别: 新手上路
UID: 7246
精华: 0
发帖: 9
可可豆: 540 CB
威望: 540 点
在线时间: 263(时)
注册时间: 2009-07-23
最后登录: 2012-04-26
7 楼:  发表于: 2010-04-08 17:22    发自: Web Page
Re:回 5楼(bobgreen) 的帖子
引用
引用第6楼winzent于2010-04-08 17:20发表的 回 5楼(bobgreen) 的帖子 :
惊见巴黎地图,LZ莫非身在法国?

这Annotation满的...


好吧,看到Chez bob了...
  
级别: 圣骑士

UID: 2228
精华: 4
发帖: 73
可可豆: 7020 CB
威望: 7020 点
在线时间: 501(时)
注册时间: 2009-02-16
最后登录: 2014-10-30
8 楼:  发表于: 2010-04-08 17:29    发自: Web Page
Re:Re:回 5楼(bobgreen) 的帖子
引用
引用第7楼winzent于2010-04-08 10:22发表的 Re:回 5楼(bobgreen) 的帖子 :
好吧,看到Chez bob了...

啊,是~嘿嘿
所以这个软件主要赚外国人的钱,我准备发布一段时间后把它的源码放代码例子区给大家交流~
级别: 精灵王

状态: 连续签到 - [20天]
UID: 349
精华: 6
发帖: 108
可可豆: 13228 CB
威望: 13203 点
在线时间: 2272(时)
注册时间: 2008-07-29
最后登录: 2019-01-10
9 楼:  发表于: 2010-04-08 17:39    发自: Web Page
引用
引用第5楼bobgreen于2010-04-08 17:16发表的  :
面具兄,吕兄
不用MapKit,不知是否WebView+Google Map API?不知是否可以实现如图所示的功能
岂不是可以兼容3.0以前的系统?
愿闻其详~


我所在的公司是国内的图场, 也就是google的国内图源, 所以是完全自己做的地图
栅格图的话, 就是UIView上贴图块(类似google的, 不过会处理掉国内的偏移问题, 目前还没有mapkit完善, 但会逐步补充)
矢量图的话, 就是UIView上直接画地图, 不过暂时有效率问题, 有待研究.

yile那边就不清楚了.

Some rather naïve people assume that I learned from a book, still others even think I took a class to learn all of this! I can say definitively that it’s in my opinion that to be a great iOS developer, you just need to write apps, and lots of them. Experiment, try different things out. (from: http://nachbaur.com/)

CocoaChina社区转载内容已尽可能注明出处,如未能核实来源或转发内容图片有权利瑕疵的,请及时联系社区进行修改或删除【联系方式QQ : 3442093904 邮箱:support@cocoachina.com】文章内容为作者独立观点,不代表CocoaChina社区立场。版权归原作者所有,如申请授权请联系作者,因文章侵权CocoaChina社区不承担任何法律及连带责任。

描述
快速回复

关注本帖(如果有新回复会站内信通知您)

发帖、回帖都会得到可观的积分奖励。查看论坛积分规则

按"Ctrl+Enter"直接提交
    顶部