Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UIView Animate and completion block

I'm trying to animate a tableview's offset down, then in the completion block would move it back up. But my code is not doing anything in the completion block:

-(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");
                         }];
    }
}

"completion block" never gets outputted... any ideas?

EDIT:

Ok, so it has something to do with my 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];
    }
}

When the refresh controll is added, it won't fire off the completion block. if i dont' add the control, it works as intended.

EDIT 2:

K, so if i scroll the table view, the completion block is then fired:

2013-02-15 13:37:06.266 [1922:14003] animating table view
2013-02-15 13:37:14.782 [1922:14003] completion block

the code as written should log "completion block" right after "animating table view", but it has a 8 second delay cause thats when i scrolled the table view myself.

how the "Pull to Refresh" looks like:

enter image description here

like image 562
Padin215 Avatar asked Feb 15 '13 18:02

Padin215


1 Answers

I used this and working fine. Its alternative solution.

[UIView animateWithDuration:0.5
                              delay:0.1
                            options: UIViewAnimationOptionCurveEaseOut
                         animations:^
         {
             CGRect frame = self.adBannerView.frame;

             self.adBannerView.frame = frame;
         }
                         completion:^(BOOL finished)
         {
         }];

try adding delay and options.

like image 64
Guru Avatar answered Sep 24 '22 02:09

Guru