我正在开发一个应用程序,我在同一个视图中创建小的子视图。
我想要的是当我更改视图的 alpha 值时,子视图的 alpha 值也发生了我不想要的更改。
如何实现更改视图值的代码,而不是创建的小子视图。
谢谢,
你不能那样做,alpha是继承的,所以你要做的就是改变视图结构
YourMainView -> 你的子视图
至
ContainerView ->YourMainView -> 你的子视图
所以现在 YourMain View 是你想要应用动画的那个,不是你当前 subView 的 paret 视图,两个视图都是兄弟,ContainerView 也将有一个清晰的背景,所以它不会影响它只会包含两个视图
正如已经建议的那样,您不应将 YourSubVew 添加为 YourMainView 的子视图。使您的两个视图成为一个空且透明的公共子视图 (ContainerView) 的子视图,该子视图与 YourMainView 当前具有相同的大小和位置。
ContainerView -> YourMainView
-> YourSubView
确保先将 YourMainView 添加为 ContainerView 的子视图,然后再将 YourSubView 添加为 ContainerView 的子视图。否则 YourMainView 可能会重叠/隐藏 YourSubView。
这样做你可以设置两个视图的 alpha 相互独立。
(奥马尔的回答非常正确,但他的“图形可视化”具有误导性,它错过了子视图序列的要点。)
编辑:你今天拥有的是这样的:
yourMainView.alpha = 1.0;
...
[yourMainView addSubView:yourSubView];
yourMainView.alpha = 0.1; //probably with animations etc.
发生的事情是,yourSubView 将“继承”其父视图的 alphaValue。还有更多。假设您的 subView 的 alpha 为 0.5,当其父视图的 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 addSubView:yourSubView]; //也将它添加到容器中!yourMainView.alpha = 0.1; //这现在只会影响 MainView。
这基本上就是所有技巧。视图可以很好地相互重叠而不是子视图。只有当它们真的是子视图时,才让它们成为子视图,当它们一起移动,一起出现和消失等时。