3

我在每一行都显示了带有坐标(存储在数组中)的 UITableView,当我点击表格行时,我想在这些坐标上居中(缩放和动画)我的 MKMapView。这是简单的经典 didSelectRowAtIndexPath 方法

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    latitude = [dataSourceLatitude objectAtIndex:indexPath.row];
    longitude = [dataSourceLongitude objectAtIndex:indexPath.row];

    MKCoordinateRegion region;
    region.center.latitude = latitudine.floatValue;
    region.center.longitude = longitude.floatValue;
    region.span.latitudeDelta = 0.20;
    region.span.longitudeDelta = 0.20;
    [map setRegion:region animated:TRUE];

    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

好吧,它适用于所有模拟器和设备,但不适用于 iOS6 的 iPad REAL DEVICE:只有在第一次点击表格行时,我才能看到地图缩放和坐标中心;在另一行上点击后,我看到地图直接以坐标为中心,没有缩放和动画。所以情况是这样的:

iPhone 5.1 simulator = it works!
iPad 5.1 simulator = it works
iPhone 5.1 REAL DEVICE = it works!

iPhone 6 simulator = it works!
iPad 6 simulator = it works
iPad 6 REAL DEVICE = it DOESN'T WORK!

编辑: pinView animatesDrop 也有问题:在带有 iOS6 的 iPad REAL DEVICE 上,我看不到下降动画,但大头针直接在地图上捕捉。我使用了来自@Anna Karenina 的优雅代码,它仅在 iOS6 上不起作用:

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)annotationViews
{
    NSTimeInterval delayInterval = 0;       
    for (MKAnnotationView *annView in annotationViews)
    {
        CGRect endFrame = annView.frame;           
        annView.frame = CGRectOffset(endFrame, 0, -500);            
        [UIView animateWithDuration:1.500
                              delay:delayInterval
                            options:UIViewAnimationOptionAllowUserInteraction
                         animations:^{ annView.frame = endFrame; }
                         completion:NULL];         
        delayInterval += 0.1500;
    }
}

这是一个众所周知的问题吗?我可以解决吗?谢谢!

4

1 回答 1

0

在所有这些情况下,您是否使用完全相同的坐标?如果当前视图离目标视图太远,动画将被跳过。例如:整个欧洲 -> 意大利 = 平滑缩放。1st Street,Nobodyville,OH -> Le First Street,PetiteVille,France = 即时快照。

于 2013-01-28T19:52:49.417 回答