7

我在为导航栏的某些子视图的 alpha 设置动画时遇到了一些麻烦。这是酒吧的初始状态:

在此处输入图像描述

这是我现在走了多远:

在此处输入图像描述

问题是,当搜索处于活动状态时,我需要使所有这些“星”、“新”和其他圆形按钮透明(我需要将它们的 alpha 减少到零)。我试图在委托的以下方法中使它们透明:

- (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,它包含这些圆形按钮以及两个 UIImageView、分段控制的背景和三角形指针。所有这些视图都作为子视图添加到导航栏。还有一个矩形视图,它包含搜索栏,并且稍后也作为子视图添加到导航栏,因此它是层次结构中的顶视图。此外,我通过简单地为其超级视图的框架设置动画(扩展或压缩它,当上述事件发生在委托中时)为我的 searchBar 设置动画。我希望我已经提供了所有必要的信息。

4

2 回答 2

1

自从我做ios编程以来已经有一段时间了。即使您设置了 alpha,但没有触发重绘,也有可能。[UIView setNeedsDisplay] 可能有助于在下一个绘图周期刷新绘图。

供参考:强制 UIView 重绘的最可靠方法是什么?

于 2013-03-26T19:27:27.770 回答
1

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

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

这将更新您的 GUI。

或者

2)在主线程上使用执行选择器并在选择器方法中更新您的 UI。

 [self performSelectorOnMainThread:@selector(UpdateUIMethod) withObject:self waitUntilDone:NO];
于 2013-04-12T07:26:34.370 回答