当指南针应用程序使用地图视图显示其位置时,会有一个小圆锥显示手机指向的方向。但是,我无法使用显示用户位置的 MKMapView 重现它。开发人员是否可以使用此视锥角功能,还是我必须自己实现一个?
谢谢!
当指南针应用程序使用地图视图显示其位置时,会有一个小圆锥显示手机指向的方向。但是,我无法使用显示用户位置的 MKMapView 重现它。开发人员是否可以使用此视锥角功能,还是我必须自己实现一个?
谢谢!
这对 MapKit 来说就像小菜一碟一样简单。这称为用户跟踪模式。您只需要写下一行代码就可以让地图变得“类似指南针”:
[mapView setUserTrackingMode:MKUserTrackingModeFollowWithHeading animated:YES];
此外,大约有 3 种 UserTrackingMode:
- MKUserTrackingModeNone (free scrolling map)
- MKUserTrackingModeFollow (center the user's location)
- MKUserTrackingModeFollowWithHeading (center user's location and track user's heading (direction)).
如果您处于两种跟踪(非免费)模式之一,然后滚动地图,该模式将自动更改为免费模式。
以下是您可以用于此问题的相关框架:
我遇到了类似的情况。我认为我们没有库或设置来在蓝色图标上显示方向(至少我的搜索不成功)。
然而,使用 CLHeading 创建我们自己的方向指示器并不难(参考 TommyG 的答案)。
我所做的是显示地图中的蓝色图标,并在不同的视图中提供一个小箭头来指示方向。
希望这在某种程度上有所帮助
MTLocation 包含大量图像,包括您所追求的锥体: https ://github.com/myell0w/MTLocation/tree/master/Resources/MTLocation.bundle
假设您有一个名为“imageTexture.jpg”的临时图像保存在缓存目录中。最喜欢的“FavoritePhoto.jpg”保存在文档目录中。要覆盖文档目录中最喜欢的一个,您可以这样做。
NSError *errorDesc;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *statesDescriptionPath = [documentsDirectory stringByAppendingPathComponent:@"FavoritePhoto.jpg"];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *cacheDirectory = [NSFileManager getCacheDirectory];
NSString *temporaryPath = [cacheDirectory stringByAppendingPathComponent:@"imageTexture.jpg"];
NSURL *originalURL = [NSURL fileURLWithPath:statesDescriptionPath];
[fileManager replaceItemAtURL:originalURL withItemAtURL:[NSURL fileURLWithPath:temporaryPath] backupItemName:nil options:NSFileManagerItemReplacementUsingNewMetadataOnly resultingItemURL:&originalURL error:&errorDesc];
if (errorDesc)
{
NSLog(@"there was an error overwriting the favorite photo: %@", errorDesc.description);
}
我正在使用 NSFileManager 类别来获取缓存目录
这是 NSFileManager+Powertools.h 的代码
#import <Foundation/Foundation.h>
@interface NSFileManager (Powertools)
+ (NSString *)getCacheDirectory;
@end
在这里你可以看到 NSFileManager+Powertools.m 的代码
#import "NSFileManager+Powertools.h"
@implementation NSFileManager (Powertools)
+ (NSString *)getCacheDirectory
{
NSString *path = nil;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
if ([paths count])
{
NSString *bundleName =
[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIdentifier"];
path = [[paths objectAtIndex:0] stringByAppendingPathComponent:bundleName];
}
return path;
}
@end