[英]Load more data from a web service when the user scrolls the UITableView
[英]Load additional objects from Core Data when a user scrolls an MKMapView
使用iPhone 3.0 SDK中的MapKit,您可以创建符合MKAnnotation协议的对象。 将它们加载到MKMapView上非常容易。 但是,当用户滚动MKMapView时,该加载新的注释了。 请求新对象的可能位置在mapView:regionDidChangeAnimated:中 ,当地图的区域发生更改时会调用该位置,然后用新的注释添加/替换注释。
具体来说,我想查询核心数据以检索当前MKCoordinateRegion (mapView.region)中存在的所有对象,以便仅加载将在屏幕上显示的对象。 Core Data中的对象具有纬度和经度属性(并且在类'.m / .h中定义了CLLocation属性,可以从中手动填充该属性),并将其用于NSPredicate来查找附近的对象。
由于Core Data数据库中存在多少个对象的性质,我们无法将所有对象预加载为批注,否则我们将耗尽内存(这会非常慢)。
如何仅检索在当前mapview边界中具有位置的对象?
抱歉,英语不是我的母语。
一旦用户向下或向上滚动,区域值将更改,特别是来自regionDidChangeAnimated的 latitudeDelta和longitudeDelta。 从那里,您可以获取当前mapView的边界。.(minlat,minlong,maxlat,maxlong)
minlat = current_coordinate_lat - latitudeDelta; //note everything is in dd (decimal degrees)
maxlat = current_coordinate_lat + latitudeDelta;
minlong = ...
maxlong = ...
由于已经有了计算的边界,因此可以处理需要显示的对象,然后在地图中添加注释。 我已经尝试过以下值。
在此处查看图片。http://img43.imageshack.us/img43/703/picture1txe.png
从那里..我可以执行sqlite3 sql语句以获取该范围内的点。
SELECT * FROM pois WHERE categ_id = %@ AND (sat_latitude > %f AND sat_latitude < %f) AND (sat_longitude > %f AND sat_longitude < %f)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.