为啥尽管使用了 `insertSubview:belowSubview:` 我的视图仍然出现在另一个视图之上?

Posted

技术标签:

【中文标题】为啥尽管使用了 `insertSubview:belowSubview:` 我的视图仍然出现在另一个视图之上?【英文标题】:Why despite using `insertSubview:belowSubview:` does my view still appear on top of the other one?为什么尽管使用了 `insertSubview:belowSubview:` 我的视图仍然出现在另一个视图之上? 【发布时间】:2013-11-01 23:27:08 【问题描述】:

在我的 Storyboard 上,我添加了一个点击图标作为 UIImageView,在代码中,我通过创建圆形视图并放大和淡化它们使其脉动并添加“涟漪”效果。我在viewDidLoadinsertSubview:belowSubview: 中添加了这些圆形视图,但无论出于何种原因,它们仍然出现在顶部。这是为什么呢?

这是我正在使用的代码:

// For the tap animation at the top
UIView *topTapRipple1 = [[UIView alloc] initWithFrame:(CGRectMake(157, 50, 13.0, 13.0))];
topTapRipple1.backgroundColor = [UIColor clearColor];
topTapRipple1.layer.cornerRadius = topTapRipple1.bounds.size.height/2;
topTapRipple1.layer.borderColor = [UIColor colorWithRed:0.886 green:0.886 blue:0.886 alpha:1].CGColor;
topTapRipple1.layer.borderWidth = 1.0;
[self.view insertSubview:topTapRipple1 belowSubview:self.middle];

UIView *topTapRipple2 = [[UIView alloc] initWithFrame:(CGRectMake(157, 50, 13.0, 13.0))];
topTapRipple2.backgroundColor = [UIColor clearColor];
topTapRipple2.layer.cornerRadius = topTapRipple2.bounds.size.height/2;
topTapRipple2.layer.borderColor = [UIColor colorWithRed:0.886 green:0.886 blue:0.886 alpha:1].CGColor;
topTapRipple2.layer.borderWidth = 1.0;
[self.view insertSubview:topTapRipple2 belowSubview:self.middle];

如您所见,我在self.middle 视图下方添加了视图,即UImageView

我想让涟漪从它后面开始,但它仍然看起来像这样:

当图像看起来像这样时,您可以在哪里看到图像顶部的圆圈:

包含问题的示例项目:http://cl.ly/2v2G053t3t0z

【问题讨论】:

也许您可以添加两个视图,然后调用 [self.view bringSubviewToFront:self.middle] 我试过了,但它也不够奇怪。 :/ 我在原始帖子中附加了一个示例项目。 你指的是“Tap Middle”动画吗? 是的,就是那个。 这不是很奇怪... 将self.middle 的背景颜色设置为红色,看看波纹是如何出现在红色背景前面但在圆形图像后面的。就好像它的不透明度在动画过程中发生了变化。 【参考方案1】:

问题是您将 topTapRipple1 和 topTapRipple2 添加到 self.view 而不是 self.topView (这是 self.middle 的超级视图)。更改它,并将它们的原点更改为 (73,30),它会按照您的意愿从后面出现。

【讨论】:

以上是关于为啥尽管使用了 `insertSubview:belowSubview:` 我的视图仍然出现在另一个视图之上?的主要内容,如果未能解决你的问题,请参考以下文章

回形针:为啥尽管质量降低了,图像的大小却没有太大变化?

为啥我的 ComboBox 是空的,尽管变量已初始化?

当加入一个非常小/空的表时,尽管我使用“LIMIT”,为啥 MySQL 会进行全面扫描?

为啥我的检测分数很高,尽管在预测过程中有明显的错误分类?

为啥我总是得到一个不允许通配符 * 的 cors 错误,尽管我在服务器上指定了一个来源?

尽管 REST 具有以下优势,为啥 Google 仍使用大量 SOAP?