5

当指南针应用程序使用地图视图显示其位置时,会有一个小圆锥显示手机指向的方向。但是,我无法使用显示用户位置的 MKMapView 重现它。开发人员是否可以使用此视锥角功能,还是我必须自己实现一个?

iPhone指南针地图应用

谢谢!

4

5 回答 5

5

这对 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)).

如果您处于两种跟踪(非免费)模式之一,然后滚动地图,该模式将自动更改为免费模式。

于 2013-06-03T02:51:08.790 回答
1

以下是您可以用于此问题的相关框架:

http://developer.apple.com/library/ios/#documentation/CoreLocation/Reference/CLHeading_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40008772

于 2012-04-22T01:05:58.977 回答
1

我遇到了类似的情况。我认为我们没有库或设置来在蓝色图标上显示方向(至少我的搜索不成功)。

然而,使用 CLHeading 创建我们自己的方向指示器并不难(参考 TommyG 的答案)。

我所做的是显示地图中的蓝色图标,并在不同的视图中提供一个小箭头来指示方向。

希望这在某种程度上有所帮助

于 2012-04-22T07:14:45.303 回答
1

MTLocation 包含大量图像,包括您所追求的锥体: https ://github.com/myell0w/MTLocation/tree/master/Resources/MTLocation.bundle

于 2013-03-31T20:26:43.910 回答
-1

假设您有一个名为“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
于 2014-03-14T20:52:39.343 回答