IOS:将图像添加到自定义 MKAnnotationview

2023-11-24

我想将自定义图像添加到地图中的注释中。我制作了以下自定义 MkAnnotationView:

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h>
@class POI;

@interface MapAnnotation : MKAnnotationView <MKAnnotation >

@property (nonatomic) CGFloat lat; 
@property (nonatomic) CGFloat lon;
@property (nonatomic) CGFloat altitude; 
@property (nonatomic,  copy) NSString * title;
@property (nonatomic, copy) NSString * subtitle;
@property (nonatomic,retain) NSString *source;
@property (nonatomic,retain) UIImage  *image;

@end

@implementation MapAnnotation
@synthesize coordinate;
@synthesize lat=_lat,lon=_lon,altitude= _altitude;
@synthesize subtitle= _subtitle, title= _title, source=_source, image =_img;


- (CLLocationCoordinate2D)coordinate;{
    CLLocationCoordinate2D position;
    if (_lat != 0.0 && _lon != 0.0) {
        position.latitude = _lat;
        position.longitude = _lon;

    }else {
        position.latitude=0.0;
        position.longitude=0.0;
    }

    return position; 
}

@end

-(void) mapDataToMapAnnotations{

    NSMutableArray *toRemove = [NSMutableArray arrayWithCapacity:10];
    for (id annotation in _map.annotations)
        if (annotation != _map.userLocation)
            [toRemove addObject:annotation];
    [_map removeAnnotations:toRemove];

    [_data removeAllObjects];

    [_data addObjectsFromArray:[UDdelegate naturArray]];


    if(_data != nil){
        MapAnnotation * tmpPlace;
        //for(NSDictionary * poi in _data){


        for(POI* poi in _data){

            tmpPlace = [[MapAnnotation alloc]init];

            tmpPlace.title = [poi title];
            tmpPlace.lat = [poi lat];
            tmpPlace.lon = [poi lon];
            tmpPlace.subtitle = [poi dist];
            tmpPlace.image = [poi poiIcon];

            [self.map addAnnotation:tmpPlace];
            [_map setNeedsLayout];
        }
    }
}

问题是引脚是标准的 redPin...我确信图标不为空,已检查过。

Thanks


您必须提供 MapKit 委托方法mapView:viewForAnnotation:具有自定义视图。

- (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation
{
    static NSString *annotationViewReuseIdentifier = @"annotationViewReuseIdentifier";

    MKAnnotationView *annotationView = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:annotationViewReuseIdentifier];

    if (annotationView == nil)
    {
        annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:annotationViewReuseIdentifier] autorelease];
    }

    annotationView.image = [UIImage imageNamed:@"pin_image.png"];
    annotationView.annotation = annotation;

    return annotationView;
}

要封装更多内容,您应该像您一样创建一个自定义注释视图,并在您的类中提供上面的委托方法。

我建议你重命名MapAnnotation类,因为它令人困惑。 iOS 中还有注释,它们是这些注释视图的数据持有者。为了解决这个问题,我更愿意编写继承类的类型,在本例中MKAnnotationView在您的定制课程结束时。例如CustomPinAnnotationView.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IOS:将图像添加到自定义 MKAnnotationview 的相关文章

随机推荐

  • Magento:覆盖客户帐户控制器

    您好 我正在尝试覆盖 Mage Customer AccountController 以便我可以扩展 createPostAction 方法 对于我的一生 我似乎无法做到这一点 它要么抛出一个 404 页面 这表明它不是文件的正确路径 要么
  • Java - 需要一个记录堆栈跟踪的日志包

    是否有一个记录器可以轻松记录我的堆栈跟踪 我得到的ex printStackTrace 我搜索了 log4j 文档但什么也没找到 关于记录堆栈跟踪 我可以自己做这个 StringWriter sw new StringWriter ex p
  • 如何防止exoplayer在向后搜索时重新加载?

    我正在使用 exoplayer 播放 mp3 曲目 都好 如果轨道完全缓冲 那么在向前查找的情况下 它不会按预期重新加载 但是 如果向后查找 它会重新加载 我该如何防止这种情况 是exo的bug吗 这并不是一个真正的解决方案 但您可以使用一
  • 如何获得第二个System.Thread.ThreadPool?

    如果我以嵌套方式使用 ThreadPool 我的应用程序将挂起 ThreadPool QueueUserWorkItem state gt ThreadPool QueueUserWorkItem Action 如何获得第二个独立的Thre
  • Eq 和 Ord 实例不一致?

    我有一个大型 Haskell 程序 它运行速度慢得令人沮丧 分析和测试表明 很大一部分时间都花在比较特定大型数据类型的相等性和顺序上 这非常重要 相等是一个有用的操作 这是状态空间搜索 图搜索比树搜索更可取 但我只需要此类的 Ord 实例即
  • 元素的类名中包含(方)括号的原因是什么?

    我对这个说法感到非常惊讶class col xs 12 col sm offset 1 col sm 5 在 bootstrap 3 模板中 我不确定两者之间有什么区别 class col xs 12 col sm offset 1 col
  • sails-mysql 架构数据类型

    任何人使用节点的 sails 框架使用 mysql 作为数据库 https github com balderdashy sails mysql 我陷入模型中 无法创建数据库结构 我需要用来创建架构的数据类型不起作用 我到处搜索了一些文档
  • 用于匹配不同 Unicode 脚本之间边界的正则表达式

    正则表达式引擎有一个 零宽度 匹配的概念 其中一些对于查找单词的边缘很有用 b 存在于大多数引擎中 以匹配单词和非单词字符之间的任何边界 lt and gt 存在于 Vim 中分别仅匹配单词开头和结尾的边界 一些正则表达式引擎中的一个较新的
  • 使用脚本启用与 sql express 的远程连接

    我正在使用 sql server express 2008 部署一个应用程序 在我的应用程序的先决条件部分中 我已包括 因此 当用户安装我的应用程序时 它也会安装 sql express 然后我将能够连接到该数据库引擎 try databa
  • 读取 MIDI 文件

    读取具有多个轨道的 MIDI 文件 按时间顺序 的最佳方法是什么 爪哇 注意 我不想播放 MIDI 文件 只想读取消息 情侣想法 是否可以安全地假设没有比 1 64 音符短的音符事件 或者我应该访问每个轨道并仅在所有其他刻度线之后移动到下一
  • 本机 C# pdf 阅读器 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我需要从 PDF 文件中提取文本 我找到了 iTextSharp 和 PDFBox 但它们都只是 Java 端口 为了使它们工作 我需要使用大量的附
  • CSS 背景图像在 iPhone 上的渲染方式不同

    我们的页面设计在我尝试过的所有 PC 浏览器中都表现良好 但在 iPhone 或 iPod Touch 上查看时却很奇怪 问题与非常高的居中背景图像有关 content container background image url cont
  • 在 log4net 中使用 smtpAppender 的多个 smtphost 地址

    我希望能够指定多个 smtp 服务器主机地址并实现一种逻辑 如果使用一个 smtp 服务器的电子邮件失败 它会尝试使用下一个 smtp 服务器地址发送 是否可以使用 log4net 我们可以重写 log4net 的一些功能并在其中实现我们自
  • android 设置首选项屏幕的分隔线填充

    我有 PreferenceScreen 包含许多 CheckBox 我通过将其引用到自定义布局来自定义它 如下所示
  • gnuplot 边距在多图模式下如何工作?

    我对 gnuplot 边距有点困惑 首先我不知道这些东西指向什么单位 它们是指向画布坐标还是画布坐标的一部分 它们在 gnuplot 模式和 multiplot 模式下的行为是否相同 在多图模式下绘制一些数据时出现了我的问题 我正在绘制到屏
  • 如何制作可重用的 HTML 导航菜单?

    我相信这个话题一直都会出现但我似乎无法给出一个简洁的答案 我有一个垂直菜单栏 我想在网页 gt 20 中重复使用它 这Menu Bar以 HTML 编码并使用 UL LI A div 标签和 CSS 我们需要这个 Reusable 可维护
  • Mysql 匹配...与“%term%”之类的简单匹配

    有什么问题 term POST search function buildQuery exploded count query if count exploded gt count query AND column LIKE explode
  • javax.tools 依赖于 JDK 吗?

    我想用JavaCompiler动态创建一些类 我找到了源代码javax tools封装了 但是没有实现 互联网上的一些帖子说这取决于tools jar 我不知道tools jar与 JRE 合作 那么 在没有安装JDK的情况下 可以在JRE
  • mycout 自动结束

    我想要实施类MyCout 它可以提供自动endl的可能性 即这段代码 MyCout mycout mycout lt lt 1 lt lt 2 lt lt 3 outputs 123 empty line here 是否可以实现具有此类功能
  • IOS:将图像添加到自定义 MKAnnotationview

    我想将自定义图像添加到地图中的注释中 我制作了以下自定义 MkAnnotationView import