iOS MKMapViewCamera旋转动画
我一直在摆弄iOS版的谷歌地图和iOS地图已经有一段时间了,在谷歌地图示例代码中,我发现了一个很棒的动画,其中地图始终以一个中心旋转。他们使用的代码是这样的iOS MKMapViewCamera旋转动画,ios,mkmapview,google-maps-sdk-ios,mkmapcamera,Ios,Mkmapview,Google Maps Sdk Ios,Mkmapcamera,我一直在摆弄iOS版的谷歌地图和iOS地图已经有一段时间了,在谷歌地图示例代码中,我发现了一个很棒的动画,其中地图始终以一个中心旋转。他们使用的代码是这样的 animationTimer = [[NSTimer alloc]initWithFireDate:[NSDate dateWithTimeIntervalSinceNow:0] interval:1.f/30.f target:self selector:@selector(moveCamera) userInfo:nil repea
animationTimer = [[NSTimer alloc]initWithFireDate:[NSDate dateWithTimeIntervalSinceNow:0] interval:1.f/30.f target:self selector:@selector(moveCamera) userInfo:nil repeats:YES];
NSRunLoop *defaultRunnLoop = [NSRunLoop currentRunLoop];
[defaultRunnLoop addTimer:preventTimer forMode:NSDefaultRunLoopMode];
- (void)moveCamera{
GMSCameraPosition *camera = self.mapView.camera;
float zoom = fmaxf(camera.zoom - 0.1f, 17.5f);
currentZoomLevel = zoom;
GMSCameraPosition *newCamera =
[[GMSCameraPosition alloc] initWithTarget:rotateAnimationCenter
zoom:zoom
bearing:camera.bearing + 10
viewingAngle:camera.viewingAngle + 10];
[self.mapView animateToCameraPosition:newCamera];
}
我现在想做的是通过使用MKMapCamera在iOS地图中实现同样的效果,下面是我迄今为止尝试过的代码
- (void)moveCamera{
MKMapCamera *newCamera = [MKMapCamera cameraLookingAtCenterCoordinate:loc fromEyeCoordinate:[self coordinateFromCoord:loc atDistanceKm:0.001 atBearingDegrees:camera.heading + 2] eyeAltitude:zoom];
[self.mapView setCamera:newCamera animated:YES];
}
- (CLLocationCoordinate2D)coordinateFromCoord:(CLLocationCoordinate2D)fromCoord
atDistanceKm:(double)distanceKm
atBearingDegrees:(double)bearingDegrees
{
double distanceRadians = distanceKm / 6371.0;
//6,371 = Earth's radius in km
double bearingRadians = [self radiansFromDegrees:bearingDegrees];
double fromLatRadians = [self radiansFromDegrees:fromCoord.latitude];
double fromLonRadians = [self radiansFromDegrees:fromCoord.longitude];
double toLatRadians = asin(sin(fromLatRadians) * cos(distanceRadians)
+ cos(fromLatRadians) * sin(distanceRadians) * cos(bearingRadians) );
double toLonRadians = fromLonRadians + atan2(sin(bearingRadians)
* sin(distanceRadians) * cos(fromLatRadians), cos(distanceRadians)
- sin(fromLatRadians) * sin(toLatRadians));
// adjust toLonRadians to be in the range -180 to +180...
toLonRadians = fmod((toLonRadians + 3*M_PI), (2*M_PI)) - M_PI;
CLLocationCoordinate2D result;
result.latitude = [self degreesFromRadians:toLatRadians];
result.longitude = [self degreesFromRadians:toLonRadians];
return result;
}
- (double)radiansFromDegrees:(double)degrees
{
return degrees * (M_PI/180.0);
}
- (double)degreesFromRadians:(double)radians
{
return radians * (180.0/M_PI);
}
MKMapview没有按我希望的方式运行,我更改了相机的各种属性,但没有任何用处。感谢您的帮助