【发布时间】:2012-03-22 05:14:56
【问题描述】:
我有一个 UIViewController。
它的视图包含一个 UITableView 作为子视图。在 viewDidAppear 上,UIViewController 调用 UITableView 的 -(void)flashScrollIndicators。
UIViewController 还观察到通知“SomethingHappened”。发生这种情况时,UIViewController 会在其视图中添加另一个小的子视图(一个 30 像素高的半透明条,显示标签“发生了什么事”)。同时UITableView的contentInset设置为顶部30px,contentOffset设置为-30px。
所有这一切都发生在 UIView 动画中,该动画很好地推动了视图上的栏并将 tableview 内容向下移动一点,而不会失去稍后滚动半透明栏后面的内容的能力。
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(addMessageView:) name:@"SomethingHappened" object:nil];
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self.tableView flashScrollIndicators];
}
- (void)addMessageView {
self.statusMessageView = [[FFStatusMessageView alloc] initWithFrame:CGRectMake(0, -kMessageViewHeight, self.view.frame.size.width, kMessageViewHeight)];
self.statusMessageView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
void (^animations)(void) = ^{
[self.view addSubview:self.statusMessageView];
self.statusMessageView.frame = CGRectMake(0, 0, self.view.frame.size.width, kMessageViewHeight);
self.tableView.contentInset = UIEdgeInsetsMake(kMessageViewHeight, 0,0,0);
if (self.tableView.contentOffset.y == 0) self.tableView.contentOffset = CGPointMake(0, -kMessageViewHeight);
};
[UIView animateWithDuration:0.4 animations:animations];
}
结果看起来非常好。这是问题所在:“SomethingHappened”通常是在 tableview 闪烁其滚动指示器的大致同时发布/观察的。这使得滚动指示器闪烁的行为非常奇怪 - 它从左侧滑入并覆盖整个内容,然后落在它应该在的右侧边缘。
我应该延迟其中一个动画(指示灯闪烁或条形放置)吗?我怎么知道什么时候开始第二个是安全的?
【问题讨论】:
标签: cocoa-touch uitableview uiscrollview core-animation