Iphone 如何从动画中排除子视图?

Iphone 如何从动画中排除子视图?,iphone,subview,Iphone,Subview,我正在开发一个应用程序,在该应用程序中,我正在同一视图中创建小的子视图 我想要的是,当我更改视图的alpha值时,子视图的alpha值也会更改,这是我不想要的 如何实现用于更改视图值而不是创建的小子视图的代码 谢谢,您不能这样做,alpha是继承的,所以您需要做的是从 YourMain视图->您的子视图 到 ContainerView->YourMainView ->您的子视图 所以现在你的主视图,你想应用动画的那一个,不是你当前子视图的paret视图,两个视图都是sibling,而且Conta

我正在开发一个应用程序,在该应用程序中,我正在同一视图中创建小的子视图

我想要的是,当我更改视图的alpha值时,子视图的alpha值也会更改,这是我不想要的

如何实现用于更改视图值而不是创建的小子视图的代码


谢谢,

您不能这样做,alpha是继承的,所以您需要做的是从

YourMain视图->您的子视图

ContainerView->YourMainView ->您的子视图


所以现在你的主视图,你想应用动画的那一个,不是你当前子视图的paret视图,两个视图都是sibling,而且ContainerView将有一个清晰的背景,所以它不会影响它,它将只包含两个视图

你不能这样做,alpha是继承的,因此,您需要做的是从

YourMain视图->您的子视图

ContainerView->YourMainView ->您的子视图


因此,现在您要应用动画的主视图不是当前子视图的paret视图,这两个视图都是sibling,而且ContainerView将有一个清晰的背景,因此它不会影响它。它将只包含两个视图,正如前面所建议的,您不应该将子视图添加为主视图的子视图。 使两个视图都成为空的透明公共子视图(ContainerView)的子视图,该子视图的大小和位置与MainView当前的大小和位置相同

ContainerView -> YourMainView 
              -> YourSubView
确保先将主视图添加为ContainerView的子视图,然后再将子视图添加为ContainerView的子视图。否则,主视图可能会重叠/隐藏子视图

这样可以将两个视图的alpha相互独立

(奥马尔的回答非常正确,但他的“图形可视化”具有误导性,它没有抓住子视图顺序的要点。)

编辑: 你今天所拥有的是这样的:

yourMainView.alpha = 1.0;
...
[yourMainView addSubView:yourSubView];
yourMainView.alpha = 0.1; //probably with animations etc.
发生的情况是,您的子视图将“继承”其superview的alphaValue。 还有更多。假设子视图的alpha值为0.5,则当其superview的alpha值设置为0.1时,该值实际上将变为0.05

将该代码更改为:

containerView = [[UIView alloc] init]; //you may choose a different init method
//If you use initWithFrame then use the frame of yourMainView. 
//However, make sure that ContainterView is of the same size as yourMainView and has the same position. 
[containerView addSubView:yourMainView];
yourMainView.alpha = 1.0;
。。。 [containerView添加子视图:您的子视图]//将它也添加到容器中! yourMainView.alpha=0.1//这将仅影响MainView


这基本上就是所有的诀窍。视图完全可以相互重叠,而不是子视图。只有当它们确实是子视图时,才将它们设为子视图,当它们一起移动、一起出现和消失时,等等。

如前所述,不应将子视图添加为主视图的子视图。 使两个视图都成为空的透明公共子视图(ContainerView)的子视图,该子视图的大小和位置与MainView当前的大小和位置相同

ContainerView -> YourMainView 
              -> YourSubView
确保先将主视图添加为ContainerView的子视图,然后再将子视图添加为ContainerView的子视图。否则,主视图可能会重叠/隐藏子视图

这样可以将两个视图的alpha相互独立

(奥马尔的回答非常正确,但他的“图形可视化”具有误导性,它没有抓住子视图顺序的要点。)

编辑: 你今天所拥有的是这样的:

yourMainView.alpha = 1.0;
...
[yourMainView addSubView:yourSubView];
yourMainView.alpha = 0.1; //probably with animations etc.
发生的情况是,您的子视图将“继承”其superview的alphaValue。 还有更多。假设子视图的alpha值为0.5,则当其superview的alpha值设置为0.1时,该值实际上将变为0.05

将该代码更改为:

containerView = [[UIView alloc] init]; //you may choose a different init method
//If you use initWithFrame then use the frame of yourMainView. 
//However, make sure that ContainterView is of the same size as yourMainView and has the same position. 
[containerView addSubView:yourMainView];
yourMainView.alpha = 1.0;
。。。 [containerView添加子视图:您的子视图]//将它也添加到容器中! yourMainView.alpha=0.1//这将仅影响MainView


这基本上就是所有的诀窍。视图完全可以相互重叠,而不是子视图。只有当它们真的是子视图时,当它们一起移动、一起出现和消失时,才将它们设置为子视图。

如果他只想更改子视图的alpha值,该怎么办?这可能吗?是的,为什么不,他可以更改它,如果他想这样做,那么没有理由更改结构如果他只想更改子视图的alpha值呢?这可能吗?是的,为什么不,他可以改变它,如果他想这样做,那么就没有理由改变结构。我同意你的观点,但我正在做的是,我正在点击一个按钮,它会动态地给我一个小视图。我想要的是背景视图的alpha值应该较少,而创建的小视图的alpha值为1。正如你所看到的白色视图,它的alpha值也在变化,我不想这样,是的。只需在您当前的两个视图后面引入一个新视图。不要创建子视图链,而是创建一个“分叉”,其中当前背景视图和新子视图是新引入的公共背景视图的子视图。(ContainerView)然后您可以更改YourMain视图的alpha并将其设置为0或0.1左右,子视图的alpha可能仍然是1或0.5左右。我会尝试扩展我的答案。我同意你的观点,但我正在做的是,我点击一个按钮,它会给我一个动态的小视图。我想要的是背景视图的alpha值应该较少,而创建的小视图的alpha值为1。正如你所看到的白色视图,它的alpha值也在变化,我不想这样,是的。只需在您当前的两个视图后面引入一个新视图。不要创建子视图链,而是创建一个“分叉”,其中当前背景视图和新子视图是新引入的公共背景视图的子视图。(ContainerView)然后您可以更改YourMain视图的alpha并将其设置为0或0.1左右,子视图的alpha可能仍然是1或0.5左右。我会尽量扩大我的答案。