MapView 的 UIImageView 子视图

Posted

技术标签:

【中文标题】MapView 的 UIImageView 子视图【英文标题】:UIImageView subview of a MapView 【发布时间】:2012-11-07 10:54:10 【问题描述】:

我必须添加一个 ImageView 作为 MapView 的子视图。我不能通过代码来完成,因为 ImageView 总是落后于 mapView。我不能在 IB 中做到这一点,因为在文件的所有者中 UIImageView 始终是 mapView 的外部尊重(我尝试了几次)。我使用的是 Xcode 4.5。我可以添加 UIImageView 作为 MapView 的子视图吗?

这是 MapViewController.h 中的代码

 @property (nonatomic, strong) UIImageView *iphoneLegenda;
 @property (nonatomic, strong)IBOutlet MKMapView *mapView;

在 MapViewController.m 中

@synthesize iphoneLegenda;
@synthesize mapView;

- (void)viewDidLoad

  //.....
    self.iphoneLegenda.frame = CGRectMake(self.mapView.bounds.origin.x, 
                            self.mapView.bounds.origin.y, 200, 100);

  //......

   [self.mapView addSubview:self.iphoneLegenda];
   [self.iphoneLegenda bringSubviewToFront:self.mapView];
  //.....

【问题讨论】:

为什么要在地图视图中使用 UIImageView?这段代码错了[self.iphoneLegenda bringSubviewToFront:self.mapView];,应该是[self.mapView bringSubviewToFront:self.iphoneLegenda]; 【参考方案1】:

我认为 AntonPalich 和 MashDup 的答案是最好的方法。 要在 mapView 中添加子视图,您必须添加 QuartzCore.framework,代码如下:

- (void)viewDidLoad

 CALayer *layer = [CALayer layer];
 layer.backgroundColor = [[UIColor whiteColor] CGColor];
 layer.bounds = CGRectMake(mapView.frame.origin.x, mapView.frame.origin.y, 200, 100);
 [[mapView layer] addSublayer:layer];

【讨论】:

【参考方案2】:

如果您希望图像视图位于地图视图的顶部,就像您使用的是 xib 一样。 mapview 已经在一个视图上,只需在 xib 中添加 imageview 就像你为 mapview 所做的一样并将其链接起来。使该 alpha 在 xib 中具有 0(以后更适合动画)。然后在您的代码中,我假设您想要一个按钮或某种按钮来打开它。 所以换行有iboutlet。

@property (nonatomic, strong) IBOutlet UIImageView *iphoneLegenda;

然后是淡入淡出的动作:

[UIView animateWithDuration:0.5 animations:^
        [iphoneLengenda setAlpha:1.];
    ];

不必乱设置框架等。

【讨论】:

【参考方案3】:

这个方案怎么样:

UIView
 - MKMapView
 - UIImageView

MKMapView 将与 UIView 大小相同,并且 UIImageView 将始终位于顶部。

【讨论】:

以上是关于MapView 的 UIImageView 子视图的主要内容,如果未能解决你的问题,请参考以下文章

插入 UIImageView 作为子视图滞后

带有子视图的 UIImageView,如 Facebook messenger

UIImageView 的 UITextField 子视图没有响应触摸事件

带有 UIImageView 子视图的 UIButton 以显示动画图像

以编程方式将约束应用于 UIImageView 子视图

在作为子视图添加的滚动视图中将触摸事件传递给 uiimageview