使用 MKMapView 和可触摸的子视图创建视图

Posted

技术标签:

【中文标题】使用 MKMapView 和可触摸的子视图创建视图【英文标题】:Creating a view with an MKMapView and a touchable subview 【发布时间】:2010-11-24 20:04:28 【问题描述】:

是否可以使用 MKMapview 和另一个子视图创建视图。特别是我有一个地图视图,我一直在尝试添加第二个子视图(到超级视图,而不是 MKMapView。)问题是,虽然可以看到两个视图对 UIView 的任何触摸,但不是 MKMapView 传递到地图。我什至尝试移动地图以使它们不重叠,但另一个 UIView 相对于地图而不是窗口定位自身。

另一个令人好奇的是,代码在模拟器上运行良好,但在运行 3.1.3 的测试设备上却不行。这可能是 3.1.3 版本的 MKMapView 的问题还是只是模拟器中的一个怪癖?

我的代码是

combinedView = [[UIView alloc] initWithFrame:self.view.frame];

self.awView = [[AdWhirlView alloc] init];
awView = [AdWhirlView requestAdWhirlViewWithDelegate:self];
self.awView.delegate = self;

[combinedView addSubview:awView];

mapView = [[MKMapView alloc] initWithFrame:CGRectMake(0,50,320,430)];
mapView = (MKMapView*)self.view;
mapView.delegate = self;
//[self.view insertSubview:mapView atIndex:0];

[combinedView addSubview:mapView];

//mapView.showsUserLocation = YES;
// Create a location coordinate object
CLLocationCoordinate2D coordinate;

coordinate.latitude = 40.1;
coordinate.longitude = -76.30575;

// Display map
mapView.region = MKCoordinateRegionMakeWithDistance(coordinate, 40000, 40000);

[combinedView bringSubviewToFront:awView];

感谢您的建议。

【问题讨论】:

【参考方案1】:

对 AdWhirlView 不太熟悉,但您是否也需要为此设置框架? CGRectMake(0,0,320,50); 什么的?

否则,您可能想要使用两个视图的 autoresizeMask。我确信您可以拥有一个带有兄弟视图的 MKMapView,它们都可以正常工作。

【讨论】:

感谢您的建议。我在 alloc ( [awView setFrame:CGRectMake(0.0, 0.0, 320.0, 50.0)]; ) 之后添加了一个 setFrame,但是触摸仍然没有被捕获而是通过了。我知道 iAd 在带有 MKMapView 的 ios 上工作,这就是为什么我想知道这是否是 OS 3 的问题。

以上是关于使用 MKMapView 和可触摸的子视图创建视图的主要内容,如果未能解决你的问题,请参考以下文章

当内部按钮触摸时,如何从 Superview 中删除以编程方式创建的子视图?

iOS - 过滤和转发触摸到子视图

在Scroll View的高度动画后,UIScrollView的子视图不响应触摸

如何使边界外的子视图识别触摸

为啥我的 UItextView 顶部的子视图没有被触摸?

跨多个子视图处理触摸事件