我正在尝试为tableview的偏移量设置动画,然后在完成块中将其向上移动。但是我的代码在完成块中什么也不做:
-(void)viewDidAppear:(BOOL)animated {
if (TRUE) {
NSLog(@"animating table view");
[UIView animateWithDuration:.25
animations:^{
self.tableView.contentOffset = CGPointMake(self.tableView.contentOffset.x, self.tableView.contentOffset.y - 60);
}
completion:^(BOOL finished){
NSLog(@"completion block");
}];
}
}
“完成模块”永远不会输出...有什么想法吗?
编辑:
好的,所以这与我的UIREfreshControl有关:
- (void)viewDidLoad
{
[super viewDidLoad];
if (TRUE) {
UIRefreshControl *refresh = [[UIRefreshControl alloc] init];
refresh.attributedTitle = [[NSAttributedString alloc] initWithString:@"Pull to Refresh"];
[refresh addTarget:self action:@selector(refreshTableView:) forControlEvents:UIControlEventValueChanged];
[self setRefreshControl:refresh];
}
}
添加刷新控件后,它不会触发完成块。如果我不添加控件,它将按预期工作。
编辑2:
K,所以如果我滚动表格 View ,则会触发完成块:
2013-02-15 13:37:06.266 [1922:14003] animating table view
2013-02-15 13:37:14.782 [1922:14003] completion block
编写的代码应在“动画表 View ”之后立即记录“补全块”,但是它有8秒钟的延迟原因,这就是我自己滚动表 View 时的原因。
“刷新”的外观如下:
最佳答案
我能够重现此问题,并找到了解决方法。
使用UIScrollView
继承的UITableView
时,您不能更改其contentOffset
不是可动画设置的属性。相反,您需要使用setContentOffset:animated:
方法。
因此,您需要做的如下:
UITableView
委托(delegate)。我在viewDidAppear
上做了。 - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
中,使动画反弹(您可以在此处通过使用performSelector:afterDelay:
添加延迟。这是代码:
@interface MyViewController ()
@property (assign, nonatomic) BOOL shouldReturn;
@end
@implementation MyViewController
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if (TRUE) {
NSLog(@"animating table view");
self.shouldReturn = YES;
self.tableView.delegate = self;
[self.tableView setContentOffset:
CGPointMake(self.tableView.contentOffset.x,
self.tableView.contentOffset.y - 60)
animated:YES];
}
}
- (void)viewDidLoad
{
[super viewDidLoad];
if (TRUE) {
UIRefreshControl *refresh = [[UIRefreshControl alloc] init];
refresh.attributedTitle = [[NSAttributedString alloc] initWithString:@"Pull to Refresh"];
[refresh addTarget:self action:@selector(refreshTableView:) forControlEvents:UIControlEventValueChanged];
[self setRefreshControl:refresh];
}
}
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
if (self.shouldReturn) {
self.shouldReturn = NO;
[self.tableView setContentOffset:CGPointZero animated:YES];
}
}
@end