2011-11-25 63 views
13

后,所以我有这行代码:执行任务(iOS中)动画结束

[tableView setContentOffset:point animated:YES];

,我希望动画结束后运行另一段代码。我的尝试是在一个单独的方法扔动画代码(setContentOffset),并使用调用它:

[self performSelectorOnMainThread:@selector(scrollMethod:) withObject:sender waitUntilDone:YES];

的问题是,该方法将立即返回,而不是动画结束后,即使waitUntilDone是YES ,但显然这就是动画的工作原理。

我知道我可以使用线程等待,但它不干净,所以我只会用它作为最后的手段。 (也许我会用这个,如果我知道滚动动画发生的时间。)

任何关于如何去做这个的想法都是值得欢迎的。 (PS的场景是这样的:我显示了一个弹出窗口,当没有键盘时显示完美,但是,如果键盘可见,弹出窗口的高度缩小,有时会将其缩小到几乎边框。显示酥料饼之前,我要向上滚动视图,以便酥料饼从未在弹出键盘)

回答

24

尝试使用此方法。

[UIView animateWithDuration:0.6f 
         delay:0.0f 
        options:UIViewAnimationOptionCurveEaseOut 
       animations:^{ 
        // Do your animations here. 
       } 
       completion:^(BOOL finished){ 
        if (finished) { 
         // Do your method here after your animation. 
        } 
       }]; 
+0

准备回答同样的问题...我想知道这是否会干扰tableView动画。 – SpacyRicochet

+0

嗨@SpacyRicochet我刚刚尝试过,它也可以。 :) – Kjuly

+0

然后,我的新答案仍然有益于教育目的:) – SpacyRicochet

35

的UITableView继承setContentOffset:动画:自其超, UIScrollView的。查看UIScrollViewDelegate的scrollViewDidEndScrollingAnimation:方法。

+4

+1实际阅读问题并给出唯一正确的答案。 – Till

+0

谢谢抢劫。 +1这个简单的方法。 – mrd3650

0

您可以创建动画并告诉它们在完成后直接执行一个块。

这是一个替代方案,可以在UITableView的动画中更好地发挥作用。

[UIView beginAnimations:nil context:sender]; 
[UIView setDelegate:self]; 
[UIView setDidStopSelector:@selector(scrollMethod:)]; 
[tableView setContentOffset:point]; 
[UIView commitAnimations]; 

,并确保实现你scrollMethod:与此签名:

- (void)scrollMethod:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context 

您可以使用上下文来知道你有哪些sender。有关UIView动画的更多信息,请阅读UIView docs

+0

你甚至不知道读完整个问题吗? – Till

+2

@Till我开始回答后改变了,所以没有。另外,如果你对此会感到尖锐,当问题提出想法时(你是否读过整个问题?),没有正确的答案;) – SpacyRicochet

+0

问题已在27分钟前提出。你10分钟前回答,问题尚未编辑。不确定屏幕上发生了什么变化。 – Till

1

对于滚动视图,或者的tableView如果的CollectionView你做这样的事情:

[self.collectionView setContentOffset:CGPointMake(self.collectionView.contentOffset.x+260.0, 
                 self.collectionView.contentOffset.y) 
           animated:YES]; 

那么你会得到一个:

-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView 

当滚动结束。

如果用户移动视图,则不会获得此回调。