ArcGIS Runtime SDK for iOS开发-展示callout

本文介绍如何使用 ArcGIS iOS SDK 中的 callout 功能来显示地图要素信息。callout 是一种方便的地图注记工具,可用于显示地图要素的标题、详细信息等。文章还介绍了如何定制 callout 的外观、响应点击事件以及如何通过编程方式显示 callout。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        本文翻译自https://developers.arcgis.com/ios/objective-c/guide/map-callout.htm

        有时候利用callout来展示图元要素的有关信息是一件很方便的事情。

        callout 停靠在图形处,callout显示图形的信息时主要分为两个部分:标题和详细信息。callout同时也有一个accessory按钮。accessory按钮用来显示另一个视图窗口,以此来展示更多的详细信息。同时callout也能在标题的左端显示一张40*40像素的图片。

       

       一个callout 是AGSCallout的一个实例。地图同时只能有一个callout,你可以通过AGSMapView中的callout属性来访问。

      自定义callout的外观

      你可以改变callout的一些可视化属性如:它的背景颜色、宽度、文字颜色、可见度和accessory按钮的外观等等,所有这些元素都可以在AGSCallout的对象中进行访问。

//don't show the accessory button
mapView.callout.accessoryButtonHidden = YES;

//or use a custom image for the accessory button
mapView.callout.accessoryButtonType = UIButtonTypeCustom;
mapView.callout.accessoryButtonImage = [UIImage imageNamed:@"<my_image.png>"];

//Change color of background, title and detail
mapView.callout.color = [UIColor blueColor];
mapView.callout.titleColor = [UIColor redColor];
mapView.callout.detailColor = [UIColor greenColor];
       另外,你也可以通过设置customView的属性来嵌入你自己的视图,来完全改变caollout的外观感受效果。



       在图形要素点击处显示callout

       当用户点击地图上的要素时,callout的代理就会被访问以决定要素对应的callout是否被展示。代理不仅可以控制callout的展示,同时也可以通过修改AGSCallout对象上的属性来定制caollout所呈现的信息。

       默认情况下,callout的代理是没有被初始化的。要想展示一个callout,你需要将其代理<AGSCalloutDelegate>设置为你工程中的一个类(一般是视图控制器view controller),并执行协议中定义的一个或多个方法。下面的代码展示了具体的调用方法:

@interface MyViewController : NSObject <AGSCalloutDelegate> 
  ...

@end

@implementation MyViewController 
...
-(BOOL)callout:(AGSCallout*)callout willShowForFeature:(id<AGSFeature>)feature layer:(AGSLayer<AGSHitTestable>*)layer mapPoint:(AGSPoint*)mapPoint{
	//Specify the callout's contents
	mapView.callout.title = (NSString*)[feature attributeForKey:@"Name"];
	mapView.callout.detail =(NSString*)[feature attributeForKey:@"Address"];
	mapView.callout.image = [UIImage imageNamed:@"<my_image.png>"];
	return YES;
}
@end

        如果你想暂时使得要素的callout实效,你可以设置AGSMapView中的属性allowCallout为NO。这样的化,无论你如何点击地图,地图都不会访问callout的代理了。

        利用程序来展示callout

        例如,当你点击列表中的一个要素时,你希望地图缩放到该要素并显示callout,那么就可以利用下面方法来实现:

        通过showCalloutAt:screenOffset:animated: 方法来实现在地图上任意一个位置显示callout。 通过showCalloutAtPoint: forFeature: animated:方法来展示某个特定的要素的callout。

        callout的附件按钮(accessory button)响应事件

        callout通常适合显示少量的信息,但是有时候我们可能有更多的信息需要展示,怎么办?这里caollout为我们提供了选择性的accessory 按钮,利用它开发者可以展示额外的视图控制器。

       当附件按钮被点击时,callout的代理就会通知调用didClickAccessoryButtonForCallout:方法。

@implementation MyViewController
  ...
  - (void) didClickAccessoryButtonForCallout: (AGSCallout *) callout {
    //Handle tap on the accessory button when callout was displayed for a graphic
  }

@end

       取消callout

       当用户点击callout以外的区域的话,callout会自动消失。但是如果你想通过代码的方法来使其消失,可以调用下面的方法:

[self.mapView.callout dismiss];



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值