iOS - 如何使导航栏的子视图透明?

7
我一直在尝试使用动画实现导航栏某些子视图的透明度变化,但遇到了一些问题。以下是导航栏的初始状态: enter image description here 目前为止,我的进展如下: enter image description here 问题是当搜索被激活后我需要使所有的“星星”、“新建”和其他圆形按钮透明(即将它们的透明度降至零)。我正在尝试在代理的以下方法中实现透明度变化:
- (void)searchBarCancelButtonClicked:(UISearchBar *)asearchBar
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar

在所有这些示例中,我编写的代码都是相同的:

//parent is just a pointer of a search delegate, which points to view controller

for (UIView * someViewToFade in parent.navigationController.navigationBar.subviews) {
  if (someViewToFade.tag == 88 || someViewToFade.tag == 11) {
    NSLog("someViewToFade.alpha before changes = %f", someViewToFade.alpha);
    someViewToFade.alpha = 0.0; //or 1.0, depending on the method
  }
}

然而,以此方式我无法达到预期的结果,虽然在那个NSLog中得到了正确的alpha值,但按钮根本不会变淡。有什么建议可以指出我可能做错了什么吗?
编辑1:
我认为我应该添加一些关于视图层次结构的描述。嗯,我有一个UISegmentedConrol,它持有这些圆形按钮和两个UIImageViews,用作分段控件的背景和三角指针。所有这些视图都添加到导航栏作为其子视图。还有一个矩形视图,它持有搜索栏,并稍后作为导航栏的子视图添加,因此在层次结构中是顶部视图。此外,我通过简单地动画化其父视图的框架来动画化我的searchBar(在代理中发生上述事件时扩展或压缩它)。我希望我已经提供了所有必要的信息。

你只需要按钮还是也需要 UISearchBar? - iPatel
只需使用自定义的UITextField覆盖整个场景即可。 - ott--
当搜索栏未激活时,我希望按钮处于激活状态;当搜索栏处于激活状态时,我希望按钮不可见。 - morgan1189
抱歉,能否再具体一些?我不太明白那怎么能帮助我。 - morgan1189
1
你尝试过将hidden设置为YES吗?如果没有,它们可能仍然会触摸到视图。这是一个UINavigationBar吗?请描述一下这些视图。 - Marcus Adams
谢谢你的回复,马库斯。我已经编辑了我的帖子来描述这些视图。我猜对我来说隐藏不太合适,因为我需要动画淡出它们。或者这样可以吗? - morgan1189
2个回答

1

1)这是UI更新问题,在任何UI更新代码之后编写此语句。

 [[NSRunLoop currentRunLoop] runUntilDate:[NSDate date]];

这将更新您的GUI。
或者
2)在主线程上执行选择器,并在选择器方法中更新您的UI。
 [self performSelectorOnMainThread:@selector(UpdateUIMethod) withObject:self waitUntilDone:NO];

1

2
设置 alpha 值后视图无需重新绘制。 - Sulthan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接