如何在具有透明顶部 UIView 的同时忽略下面的一个 UIView - iOS CocoaTouch

Posted

技术标签:

【中文标题】如何在具有透明顶部 UIView 的同时忽略下面的一个 UIView - iOS CocoaTouch【英文标题】:How to ignore one UIView below in while having transparent top UIView - iOS CocoaTouch 【发布时间】:2014-08-09 11:44:14 【问题描述】:

我的视图层次结构看起来像这样

View
  DeckContainer
   Card  (back card)
   Card  (this is front card)

卡片是半透明的。

我能否以某种方式看穿“背卡”并创造一种 X 射线效果?

图片将阐明这一点:

我只是不想看到“Cineworld”卡,但我希望这张卡在那里(前面的卡可以移动)

【问题讨论】:

不能隐藏视图吗? backCardView.hidden = YES; @OliverAtkinson 我不想看到第一张卡片并看到第二张卡片。但我希望第二张卡在那里。像 X 射线一样,“皮肤存在”,但我想看到“皮肤”后面,而第一张卡片在“皮肤”上方。 降低不透明度 ?那是你想要的吗?透明背卡? 那么你是不是想让背卡在顶卡覆盖的时候是全透明的,但是当顶卡移动的时候,你会露出后面的半透明卡? @wottle 是的。顶部卡片未覆盖的“背面卡片”部分应可见。 【参考方案1】:

添加一个卡片背景视图,其 backgroundColor 的透明度 (alpha) 设置为小于 1(可能为 0.5),当它是顶部卡片时。比如:

View
    Card (back card outer view)
        Card Background view
        Card Icon view
        Card Label view
    Card (front card outer view)
        Card Background view
        Card Icon view
        Card label view

然后您就可以通过正面卡片看到背面卡片。

卡片外部视图允许通过更改外部视图的frame来整体移动卡片。

卡片外部视图backgroundColor 应该清晰(例如,[UIColor clearColor])。

结果将如下所示(前后“卡片”偏移,以便更容易查看两张卡片的内容):

【讨论】:

您可能还没有阅读我的问题的底部(图片下方)“我只是不想看到“Cineworld”卡,但我希望这张卡在那里(前卡可以移动)”我基本上想要“X射线”效果,所以绿色背景可以通过“皮卡迪利马戏团”卡看到,但不是Cineworld。但是 Cineworld 会在那里,所以当你放置两张卡时(就像你的例子一样),“Cineworld”的一部分是可见的。

以上是关于如何在具有透明顶部 UIView 的同时忽略下面的一个 UIView - iOS CocoaTouch的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Ios 会忽略它下面的顶部栏和布局项?

UIView 位于半透明导航栏后面,具有实用创建的视图约束

在一个 UIView 上画图,打个透明的洞可以看到下面的 UIView

UIView背景颜色和顶部透明png

如何在 UIView 周围制作自定义边框?

当很清楚并且不同的uiview可以处理它们时,如何忽略最上面的uiview中的触摸事件