- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我在使用 MKMapView 和 MKMapCamera 时注意到奇怪的行为。我需要实现一些 Apple Maps 应用程序的标准行为。基本上,本地图 View 的用户跟踪模式设置为 MKUserTrackingModeFollowWithHeading 时,我需要能够在 2D 和 3D 模式之间切换。
目前,当 userTrackingMode 设置为 MKUserTrackingModeNone 时,我的解决方案工作正常,但它在其他模式下会出现奇怪的动画(无论我 setCamera: animated:YES 还是 NO,它都会发生)。当我在设置新的之前和之后记录相机参数时,唯一的区别是我的音高变化。
另一个问题是更改相机的高度以编程方式放大或缩小。我正在尝试在 IBAction 方法中使用捏合或捏合手势来模仿缩放。在 followWithHeadingMode 中, map 始终返回到“默认”缩放级别(相机的高度),而在其他模式下效果很好。
我开始了示例项目来检查发生了什么,这是我的单 View 应用程序的 View Controller 和发生问题的 map View :
#import "CCViewController.h"
@interface CCViewController ()
@end
@implementation CCViewController
- (void)viewDidLoad{
[super viewDidLoad];
}
- (void)setUpMap{
[self.mapView setShowsUserLocation: YES];
}
- (void)viewDidAppear:(BOOL)animated{
[self setUpMap];
}
- (IBAction)mapModeSwitchClicked:(id)sender {
MKMapCamera *newCamera = [MKMapCamera camera];
newCamera.centerCoordinate = self.mapView.camera.centerCoordinate;
newCamera.heading = self.mapView.camera.heading;
newCamera.altitude = self.mapView.camera.altitude;
if(!self.mapView.camera.pitch){
newCamera.pitch = 50;
self.mapModeSwitch.title = @"2D";
}
else{
newCamera.pitch = 0;
self.mapModeSwitch.title = @"3D";
}
[self.mapView setCamera:newCamera animated:YES];
}
- (IBAction)locateMeButtonClicked:(id)sender {
if(self.mapView.userTrackingMode != MKUserTrackingModeFollowWithHeading)
[self.mapView setUserTrackingMode:MKUserTrackingModeFollowWithHeading animated:YES];
else
[self.mapView setUserTrackingMode:MKUserTrackingModeNone animated:YES];
}
- (void)zoomMapWithZoomFactor:(double)factor{
MKMapCamera *newCamera = [MKMapCamera camera];
newCamera.pitch = self.mapView.camera.pitch;
newCamera.heading = self.mapView.camera.heading;
newCamera.altitude = self.mapView.camera.altitude * factor;
newCamera.centerCoordinate = self.mapView.camera.centerCoordinate;
[self.mapView setCamera:newCamera animated:YES];
}
- (IBAction)zoomInClicked:(id)sender {
[self zoomMapWithZoomFactor: 0.5];
}
- (IBAction)zoomOutClicked:(id)sender {
[self zoomMapWithZoomFactor: 2];
}
@end
我正在寻找的是类似于 Apple map 应用程序的行为。你有什么想法?我做错了什么?
最佳答案
我相信这是 MapKit 中的一个错误。我在启用 MKUserTrackingModeFollowWithHeading 时通过编程缩放进行了类似的观察: map 很快缩小,但在收到下一个位置更新后立即返回到之前的缩放级别。
参见 rdar://15374402 (MapKit:在 UserTracking 期间进行编程缩放)和 rdar://15374604 (MKUserTrackingModeFollow 禁止在边缘进行注解选择)。
我的建议:只要您希望对显示的 map 区域进行编程控制,请避免使用 MKUserTrackingModeFollow 和 MKUserTrackingModeFollowWithHeading。
关于ios - 在 MKUserTrackingModeFollowWithHeading map 模式下设置 MKMapCamera 时奇怪的 MKMapView 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19606648/
当我在我的 map View (MapKit) 上设置具有特定高度的 MKMapCamera 时,它有时不会缩放到正确的高度。我认为这与 map 没有完全加载有关,所以它停在更高(950m 左右)而不
所有。我需要一些帮助。我正在使用 MapKit,当然我的相机可以上下移动(放大和缩小)。 我想在缩放时更改 MKMapCamera 间距。因此,当相机较低时,间距会很大 (~80),而当相机较高时,间
当 View 滚动时,我一直在记录 MKMapView 相机的高度,我发现了一个奇怪的行为:视点的高度随着用户滚动而波动,尽管外观 map 的缩放级别保持不变。 经过仔细检查,似乎海拔高度会随着用户向
我在 iOS 中编码。 我有一个 NSArray,其中包含一些 MKMapCameras。我想一个接一个地显示数组中的 MKMapCameras。 我放了一个 while 循环并使用了 [self.m
我想在 MKMapView 动画化为新的 MKMapCamera 后调用一个方法。 我首先使用此方法附加 MKMapCamera: [self.map setCamera:cam animat
我找到了三种使用 MKMapCamera 的方法,我想知道哪一种是最值得推荐的。我的目标是跟随用户,我想在每次位置更新时(每秒)更新相机。 1. MKMapCamera *ne
我正在使用简单的 NSTimer 以编程方式旋转 MKMapView,以不断增加 MKMapCamera 的航向属性,该属性按预期工作(导致 map 围绕华盛顿纪念碑缓慢旋转)。 我不希望 map 围
我需要弄清楚如何设置 MKMapSnapshotterOptions 来拍摄与地球多边形区域相关的航空/卫星图像快照。 填写“区域”、“比例”、“大小”和“mapType”属性很简单,因为我有一个 M
所以我正在尝试做 3 件事。 有一张显示我所在位置的 map 。 map 应略微倾斜以提供 3d 的感觉;就像我们用 2 根手指在苹果 map 上上下滚动一样。 使用罗盘旋转 map 。 我在 map
我在使用 MKMapView 和 MKMapCamera 时注意到奇怪的行为。我需要实现一些 Apple Maps 应用程序的标准行为。基本上,本地图 View 的用户跟踪模式设置为 MKUserTr
我是一名优秀的程序员,十分优秀!