首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何减缓MKMapCamera的运动?

如何减缓MKMapCamera的运动?
EN

Stack Overflow用户
提问于 2013-10-01 03:40:53
回答 2查看 2.7K关注 0票数 0

我正在用iOS编码。

我有一个NSArray,它包含一些MKMapCameras。我想一个接一个地从数组中显示MKMapCameras。

我放了一个while循环并使用了[self.mapView setCamera:nextCamera animated:YES];

然而,这只是第一种和最后一种观点。中间的一切都进展得太快了。

我想放慢每台相机的运动速度。是否有办法使用CATransaction或任何其他动画技巧来实现它?如果是的话,请给我看一个示例代码好吗?

想提供最新消息..。我试过下面的代码。但这行不通..。正如我前面提到的,相机的移动速度很快。

代码语言:javascript
复制
[CATransaction begin];
[CATransaction setAnimationDuration:5.5];
[CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[CATransaction setCompletionBlock:^{
    [self.mapView setCamera:nextCamera animated:YES];
}];
[CATransaction commit];
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-02 01:40:02

在摆弄了几个小时后,我想出了一个办法让它发挥作用。想和每个人分享同样的..。

我做了两个改变。我用UIView的动画代替了CATransaction。我还删除了相机的默认动画设置,这与UIView的动画冲突。

下面是密码。

代码语言:javascript
复制
[UIView beginAnimations:nil context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
[UIView setAnimationDuration:2.5];
self.mapView.camera = nextCamera;
[UIView commitAnimations];
票数 5
EN

Stack Overflow用户

发布于 2013-10-28 14:05:06

根据WWDC的‘把MapKit在透视’的视频,你应该避免任何方法使用完成处理程序动画的地图相机的顺序。相反,您应该在地图视图中设置一个委托,并侦听regionDidChangeAnimated: call以触发序列中的下一个摄像机。这样就可以用animateWithDuration来控制摄像机的运动速度:

代码语言:javascript
复制
-(void)flyToLocation:(CLLocationCoordinate2D)toLocation {


    CLLocationCoordinate2D startCoord = self.mapView.camera.centerCoordinate;

    CLLocationCoordinate2D eye = CLLocationCoordinate2DMake(toLocation.latitude, toLocation.longitude);


    MKMapCamera *upCam = [MKMapCamera cameraLookingAtCenterCoordinate:startCoord
                                                        fromEyeCoordinate:startCoord
                                                              eyeAltitude:80000];


    MKMapCamera *turnCam = [MKMapCamera cameraLookingAtCenterCoordinate:toLocation
                                                        fromEyeCoordinate:startCoord
                                                              eyeAltitude:80000];

    MKMapCamera *inCam = [MKMapCamera cameraLookingAtCenterCoordinate:toLocation
                                                        fromEyeCoordinate:eye
                                                              eyeAltitude:26000];

    self.camerasArray = [NSMutableArray arrayWithObjects:upCam, turnCam, inCam, nil];

    [self gotoNextCamera];

}

-(void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated {
    [self gotoNextCamera];
}

-(void)gotoNextCamera {

    if (self.camerasArray.count == 0) {
        return;
    }

    MKMapCamera *nextCam = [self.camerasArray firstObject];
    [self.camerasArray removeObjectAtIndex:0];

    [UIView animateWithDuration:3.0 animations:^{
        self.mapView.camera = nextCam;
    }];

}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19107550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档