我试图将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");
}];
}
}
Run Code Online (Sandbox Code Playgroud)
"完成块"永远不会输出......任何想法?
编辑:
好的,所以它与我的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];
}
}
Run Code Online (Sandbox Code Playgroud)
添加刷新控件时,它不会触发完成块.如果我不添加控件,它按预期工作.
编辑2:
K,所以如果我滚动表视图,则会触发完成块:
2013-02-15 13:37:06.266 [1922:14003] animating table view
2013-02-15 13:37:14.782 [1922:14003] completion block
Run Code Online (Sandbox Code Playgroud)
写入的代码应该在"动画表视图"之后立即记录"完成块",但是当我自己滚动表视图时它有8秒的延迟原因.
"拉动刷新"如何看起来像:

Gur*_*uru 14
我用这个并且工作正常.其替代解决方案.
[UIView animateWithDuration:0.5
delay:0.1
options: UIViewAnimationOptionCurveEaseOut
animations:^
{
CGRect frame = self.adBannerView.frame;
self.adBannerView.frame = frame;
}
completion:^(BOOL finished)
{
}];
Run Code Online (Sandbox Code Playgroud)
尝试添加延迟和选项.
我能够重现这个问题并找到了解决方法.
当使用UIScrollView,它UITableView从继承,你不能改变它contentOffset不是一个动画属性.相反,您需要使用该方法setContentOffset:animated:.
那么,你需要做的是如下:
UITableView委托.我做了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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27039 次 |
| 最近记录: |