4

Apple CrumbPath.o と CrumbPathView.o が提供するクラスを使用しましたが、iphone 5.0 のみをサポートし、iphone 4.0 で同じコードを実行しようとすると、ルートが更新されません。コード :

 if (newLocation)
    {

    if (oldLocation.coordinate.latitude == 0.0) {
        initialLocation = [[[CLLocation alloc]initWithLatitude:newLocation.coordinate.latitude longitude:newLocation.coordinate.longitude]retain];
    }
    // make sure the old and new coordinates are different
    if((oldLocation.coordinate.latitude != newLocation.coordinate.latitude) &&
      (oldLocation.coordinate.longitude != newLocation.coordinate.longitude))
    {    
    if (!crumbs)
    {
        // This is the first time we're getting a location update, so create
        // the CrumbPath and add it to the map.
        //
        crumbs = [[CrumbPath alloc] initWithCenterCoordinate:newLocation.coordinate];
        [mapView addOverlay:crumbs];

        // On the first location update only, zoom map to user location
        MKCoordinateRegion region = 
        MKCoordinateRegionMakeWithDistance(newLocation.coordinate, 2000, 2000);
        [mapView setRegion:region animated:YES];
    }
    else
    {
        // This is a subsequent location update.
        // If the crumbs MKOverlay model object determines that the current location has moved
        // far enough from the previous location, use the returned updateRect to redraw just
        // the changed area.
        //
        // note: iPhone 3G will locate you using the triangulation of the cell towers.
        // so you may experience spikes in location data (in small time intervals)
        // due to 3G tower triangulation.
        // 
        Count++;
        double latitude = 0.000500 * Count;
        double longitude = 0.000020 * Count;
        _bean = [[TempBean alloc]init];
        _bean.lat = newLocation.coordinate.latitude + latitude;
        _bean.lon = newLocation.coordinate.longitude - longitude;



        CLLocation *locationToDraw = [[CLLocation alloc]initWithLatitude:_bean.lat longitude:_bean.lon];
        //                UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Update_Loc" message:[NSString stringWithFormat:@"Lat:%f , Lon:%f",locationToDraw.coordinate.latitude,locationToDraw.coordinate.longitude] delegate:self cancelButtonTitle:@"ok" otherButtonTitles:@"Cancel",nil];
        //                [alert show];
        //                [alert release];

        MKMapRect updateRect = [crumbs addCoordinate:locationToDraw.coordinate];

        if (!MKMapRectIsNull(updateRect))
        {
            // There is a non null update rect.
            // Compute the currently visible map zoom scale
            MKZoomScale currentZoomScale = (CGFloat)(mapView.bounds.size.width / mapView.visibleMapRect.size.width);
            // Find out the line width at this zoom scale and outset the updateRect by that amount
            CGFloat lineWidth = MKRoadWidthAtZoomScale(currentZoomScale);
            updateRect = MKMapRectInset(updateRect, -lineWidth, -lineWidth);
            // Ask the overlay view to update just the changed area.
            [crumbView setNeedsDisplayInMapRect:updateRect];
        }
        [self calDistance:initialLocation SecondCor:locationToDraw];
        [locationToDraw release];
        locationToDraw =nil;
        [_bean release];
        _bean = nil;


}}
4

1 に答える 1