仅为 MKMapView 上的第一个和最后一个 MKAnnotation 设置 MKPinAnnotationColorRed

2023-12-22

I've an NSArray定制的MKAnnotation,我需要为第一个/最后一个注释设置红色引脚颜色,否则设置绿色引脚。 该程序的行为不符合我的要求,绿色引脚每次都以随机方式与两个不同的注释相关联,而不是按照我想要的方式与第一个和最后一个注释相关联。

所以,这就是我在控制器中所做的事情:

- (void)viewDidLoad
{   
    [super viewDidLoad];   
    //load set a coords from file etc...  
    //self.coordinates is the array of annotations   
    [self.myMap addAnnotations:self.coordinates];  
} 

然后在viewForAnnotation:回调中:

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation{
    NSString *ident = @"MY_IDENTIFIER";
    MKPinAnnotationView *annView=(MKPinAnnotationView *)[self.myMap dequeueReusableAnnotationViewWithIdentifier:ident];
    if(self.myMap.userLocation==annotation){
        return nil;
    }
    if(annView == nil){
        annView=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:ident];
        annView.animatesDrop=TRUE;
        annView.canShowCallout = YES;
        annView.rightCalloutAccessoryView=[UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        annView.calloutOffset = CGPointMake(-5, 5);
        int currIdxAnn=[self.myMap.annotations indexOfObject:annotation];
        int lastIdxAnn=[self.myMap.annotations indexOfObject:[self.myMap.annotations lastObject]];
        /*
        if (currIdxAnn==0 || currIdxAnn==lastIdxAnn) {
            annView.pinColor=MKPinAnnotationColorRed;
        }else {
            annView.pinColor=MKPinAnnotationColorGreen;
        }*/
         CustomAnnotation *an=(CustomAnnotation *)annotation;
         if (an.tag==98||an.tag==99) {
            annView.pinColor=MKPinAnnotationColorGreen;
         }else {
            annView.pinColor=MKPinAnnotationColorRed;
         }

    }
    return annView;
}

看来方法是这样的addAnnotations:并不像我认为的那样工作,可能以与数组不同的顺序加载注释。是否可以?
我也尝试过类似的过程didAddAnnotationViews:但没有好的结果。

一些提示? 谢谢。

PS:当我写完这个问题时我发现this https://stackoverflow.com/a/9543136/251513回应,似乎证实了我的理论。有人已经遇到过类似的问题吗?

EDIT:经过几次测试,我意识到实现我想要的最好方法是首先为我的第一个/最后一个注释设置一个标签:

CustomAnnotation *first=[self.coordinates objectAtIndex:0];
first.tag=98;
CustomAnnotation *last=[self.coordinates objectAtIndex:[self.coordinates indexOfObject:[self.coordinates lastObject]]];
last.tag=99;

然后如你所见,我稍微修改了viewForAnnotation理解注释是我所寻找的。 然后,技巧就是调用在后台线程中添加注释的函数,例如:

[self performSelectorInBackground:@selector(addAllAnnot) withObject:nil];

-(void)addAllAnnot{

    [self.myMap addAnnotations:self.coordinates];
}

经过一周的测试后,这对我有用,如果有人有更好的想法,我们将不胜感激。


看看您在答案中提到的答案,我认为您无法确定这些注释的添加顺序或它们在地图视图的内部列表中的索引。

那么你有什么选择..?与往常一样,最基础的——对 MKAnnotation 类进行子类化并向其添加一个属性,通过该属性您可以区分正在添加哪个注释。因此,只需在数组中添加这些注释时设置属性...希望这可以解决您的问题..

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

仅为 MKMapView 上的第一个和最后一个 MKAnnotation 设置 MKPinAnnotationColorRed 的相关文章

  • Swift:如何让游戏中的角色只有落地后才能跳跃?

    我正在开发一款游戏 我的角色可以从一个陆地跳到另一个陆地 我已经把所有事情都做好了 除了我剩下的问题是 如果你继续点击屏幕 他可以永远跳跃 我希望他必须先落地才能再次跳跃 import SpriteKit import GameplayKi
  • 在 iOS 7 中查看 Core Data 创建的 sqlite 文件时出现问题

    当我尝试访问由核心数据创建的数据库文件时遇到问题 DB 文件位于 Documents 文件夹中 我已将其复制到桌面并使用 Firefox 插件打开它 Hello sqlite文件不包含任何行我有使用核心数据插入值 我正在使用 iOS 7 模
  • iPhone:每日本地通知

    我正在尝试实现本地通知 这就是我所设置的 Current date NSDate date NSDate date Add one minute to the current time NSDate dateToFire date date
  • iOS FacebookSDK + 解析 SDK + GoogleMaps SDK

    我搜索了很多 然后我意识到 ObjC标记那个GoogleMapSDK需要 但不能很好地配合ParseSDK and FacebookSDK 所以我阅读了所有的 stackoverflow 答案并尝试解决我的问题 问题还没有解决 我执行的步骤
  • 为什么 iPhone 应用程序的 main() 函数没有机会完成?

    考虑以下main 大多数 iPhone 应用程序都采用以下方法 int main int argc char argv NSAutoreleasePool pool NSAutoreleasePool alloc init int retV
  • Xcode - 发布和分发配置中的 Malloc_Error

    仅当我在设备上选择发布或分发配置时 我才会收到此错误 在模拟器上它运行良好 请问 我错在哪里 cc1obj 4113 malloc mmap size 429379584 failed error code 12 error can t a
  • 更改目录时 Gitlab CI 运行程序作业失败退出状态 1

    我正在使用我的个人机器作为使用 Fastlane 的 iOS 项目的运行程序 这主要是因为共享运行器没有为 iOS 设置 因为它们没有安装 Xcode 更改目录时我的作业立即失败 它是一个 shell 运行程序 根本没有其他自定义配置 有什
  • 使用 JSONKit 解析 JSON 文件

    我正在构建一个音叉应用程序 货叉应允许最多 12 个预设节距 此外 我希望允许用户选择一个主题 每个主题都会加载一组预设 不必使用所有预设 我的配置文件看起来像这样 theme A3 comment An octave below conc
  • 与 parse-server 和 auth0 的自定义身份验证集成

    我想将 auth0 com 与开源解析服务器结合使用 我当前的方法是通过 iOS 的 Lock 库使用标准登录从 auth0 获取令牌 使用该令牌 我想在解析服务器上调用自定义身份验证方法 该方法检查令牌是否有效 如果有效则将登录用户 我的
  • 在 Xcode 中查找未使用的文件

    我最近开始开发一个新应用程序 它基本上是我以前制作的应用程序的副本 但做了一些更改 为了制作这个新应用程序 我复制了旧应用程序并删除了一些不需要的内容 我想知道 有没有办法知道 Xcode 中正在使用哪些类文件 或者有什么关于如何查找未使用
  • Apple 由于崩溃而拒绝了我的应用程序,无法重现它

    我刚刚上传了一个应用程序到应用程序商店 它是为ios 7开发的 他们拒绝了该应用程序 因为我无法重现崩溃 他们向我发送了这份崩溃报告 Exception Type EXC BAD ACCESS SIGSEGV Exception Subty
  • 无法在 xcode 8 beta 6 上编译 AWS CustomIdentityProvider

    我在 iOS 应用程序中使用 Amazon Cognito 和 Facebook 登录 直到 beta 5 为止此代码从这个SO线程 https stackoverflow com questions 37597388 aws cognit
  • 检测 iPhone 屏幕是否打开/关闭

    有没有办法检测 iPhone 的屏幕是打开还是关闭 例如 当按下手机的屏幕锁定按钮时 我一直在使用 void applicationWillResignActive UIApplication application 为此类事件做准备 在大
  • 按升序对 NSDictionary 进行排序

    我正在尝试排序NSDictionary按升序排列 我正在使用这段代码 NSDictionary valDict self mGetDataDict key rowKey for NSString valueKey in valDict al
  • 为什么 Apple 建议以编程方式创建模态导航控制器?

    以模态方式呈现导航控制器时 以编程方式创建和配置导航控制器对象通常更简单 虽然您也可以使用 Interface Builder 来执行此操作 但通常不建议这样做 事实上 因为我的导航控制器很简单 我宁愿在IB中自定义视图 虽然我不知道确切的
  • iOS 7 NS 单线程安全合并冲突

    重新排序两行后 在单线程应用程序上保存简单的数据时遇到问题 我已经成功地简化了编码以重现错误 并且希望其他人尝试这一点时得到第二个意见 这是一次健全性检查 因为我怀疑 iOS 7 引入的核心数据问题 而这在 iOS 6 中工作正常 首先 启
  • UITableViewCell 内嵌套 UIStackView 内的 UILabel 有时会被截断

    我的一个表设置中有一个表视图单元格 其中包含以下视图层次结构 外部水平 stackview 固定到单元格内容视图的尾部 前部 底部和顶部边缘 右侧标签固定到其父 stackViewHackView 的尾部 前部 底部和顶部边缘 在我的控制器
  • 使用 Dirac 在 iPhone 中进行实时音高变化 [重复]

    这个问题在这里已经有答案了 可能的重复 iPhone 上的实时音调变换 https stackoverflow com questions 1100495 real time pitch shifting on the iphone 我已经
  • 使用ios sdk在youtube上上传视频的方法[重复]

    这个问题在这里已经有答案了 可能的重复 如何从 iOS 应用程序中将视频上传到 YouTube https stackoverflow com questions 3528568 how do i upload a video to you
  • iOS:如何创建核心数据库的备份副本?以及如何导出/导入该副本?

    我想为我的应用程序的用户提供创建核心数据数据库备份的可能性 特别是在他切换到新设备等情况下 我该怎么做呢 特别是如何重新导入该文件 我的意思是 假设他制作了数据库的备份副本 然后更改了大量内容并想要重置为以前保存的备份副本 我该怎么做呢 T

随机推荐

  • 用于字符串插值的 Swift 协议

    我必须实现什么协议来控制 Swift 中字符串插值中对象的表示方式 我不想指定打印的内容 如下所示 struct A var a A println a 您需要实施Printable协议 该协议应该被那些希望定制自己的类型的类型所采用 文本
  • 为什么 VStack 不能在带有滚动视图的 GeometryReader 中工作?

    我的 vStack 滚动视图在没有 GeometryReader 的情况下也能工作 在 AppleTV 中 我没有在 iOS 中进行测试 然后我添加了几何读取器 VStack 像 ZStack 一样 折叠 我能做什么来解决这个问题 是的 我
  • ASP.NET MVC 站点地图和/或安全调整

    ASP NET MVC 中是否有与 Web 表单中的 SiteMap 和安全调整功能等效的功能 我刚刚开始学习 MVC 一直在寻找解决方案 以防止在学习时走上错误的道路 Check ASP NET MVC 站点地图提供程序 https gi
  • 将 Param 与参数数组绑定

    我有一个函数可以执行此操作 function registerUser firstName lastName address postcode email password params array firstName lastName a
  • Oracle 中触发器无效

    在对表进行某些更改后 我的数据库中的某些触发器变得无效 但他们似乎仍在工作 我遇到的唯一问题是 如果我使用 SQL Developer 触发器的左侧会出现红叉 表明它们无效 这是一个大问题吗 我知道我可以重新编译触发器来解决这个问题 但我不
  • 为什么我的许可证没有显示?

    In my
  • Asp.Net MVC 验证 - 依赖字段

    我目前正在尝试进行 MVC 验证 并且遇到了一些问题 其中需要一个字段 具体取决于另一个字段的值 下面是一个例子 我还没弄清楚 如果 PaymentMethod Cheque 那么 ChequeName 应该是必需的 否则可以通过 Requ
  • NSMutableArray 线程安全

    在我的应用程序中 我正在从多个线程访问和更改可变数组 一开始 当我尝试使用以下命令访问对象时 它崩溃了objectAtIndex 因为索引超出范围 该索引处的对象已从另一个线程的数组中删除 我在网上搜索了如何解决这个问题 我决定尝试这个so
  • facebook c# sdk - 用户尚未授权应用程序执行此操作

    我正在构建一个控制台应用程序 它将将流发布到页面墙上 问题 我收到 用户尚未授权应用程序执行此操作 我正在使用 opengraph 来获取访问令牌 我错过了什么吗 任何帮助是极大的赞赏 谢谢 constants string apiKey
  • Android 在 AsyncTask onPostExecute 中使用接口返回值[重复]

    这个问题在这里已经有答案了 在下面的代码中我想返回值AsyncTask使用接口 但我得到了错误的值 并且无法返回正确的值onPostExecute 我开发了这个link https stackoverflow com questions 1
  • 无法从 JAVA 连接到 Mongo SSL 副本集

    我正在尝试使用 SSL 加密设置最新版本的 MongoDB 我能够从 mongo shell 进行连接 但是当我从 Java 客户端连接时出现错误 Works mongo admin host mongo1 xxxx com ssl ssl
  • 查看由数字表示的文件的特定行

    好吧 这可能是一件显而易见的事情 但它让我无法理解 因为到目前为止 它可能可以用一种我不知道的更简单的方式来完成 假设有一个 文件 我只想查看该文件的行号 X 上的内容 解决方案是什么 这是我能想到的 head X lt file tail
  • Github文件夹结构更改

    我正在使用 Github 进行网站项目 我已经检查更改有一段时间了 但现在我想更改我的文件夹结构 基本上是更好地组织文件 这会弄乱我的 Github 存储库吗 如果是 那么确保我的版本保持完整并且我的新文件夹结构与 Git 同步的最佳方法是
  • IOCCC 2013 解释美国总统的一行行聚会

    我在上找到了这段代码ioccc http ioccc org 2013 cable1 我什至开始理解它是如何工作的 void main int riguing char acters puts 1 acters int 1 acters 4
  • WSO2 API 管理器 - 无法启动服务器

    我想在我的计算机上安装和使用 WSO2 API Manager 但当我尝试启动服务器时遇到一些问题 我使用 API Manager 3 0 0 版本 并通过 Windows 的 msi 安装它 以下是当我尝试以干净的设置启动服务器时出现的错
  • 有时 - 无法构建 Windows Azure 云服务 - 对象引用未设置为对象的实例?

    我有一个解决方案 其中有工作者角色 一些项目库和云服务 有时我无法构建解决方案 不更改源代码或任何内容 输出窗口显示 1 gt 错误 未将对象引用设置为对象的实例 构建 0 成功 1 失败 2 最新 0 跳过 当我尝试在云服务项目中编辑辅助
  • Nexus 10 - 在 Windows 7 或 Linux 上对 adb 不可见

    adb 无法识别 Windows 7 上的我的 Nexus 10 这是我所做的 安装了 Google 的 SDK 和 USB 驱动程序 Windows 7 将平板电脑视为 Android ADB 接口 单击 关于平板电脑 并单击内部版本号七
  • 使用 <=> 而不是仅仅排序和反转有好处吗?

    这样做有什么好处 如果有的话 books sort firstBook secondBook secondBook lt gt firstBook versus books sort reverse 第二个选项看起来更干净 更容易理解 ed
  • groupby后聚合的列组合

    Question 寻找类似的东西 df groubpy key aggregate combination columnA columnB 代替 df combination combination columnA columnB df g
  • 仅为 MKMapView 上的第一个和最后一个 MKAnnotation 设置 MKPinAnnotationColorRed

    I ve an NSArray定制的MKAnnotation 我需要为第一个 最后一个注释设置红色引脚颜色 否则设置绿色引脚 该程序的行为不符合我的要求 绿色引脚每次都以随机方式与两个不同的注释相关联 而不是按照我想要的方式与第一个和最后一