您的位置:首页 > 移动开发 > IOS开发

ArcGIS Runtime SDK for iOS开发-展示callout

2015-04-06 17:44 489 查看
本文翻译自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];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: