2015-03-18 5 views
0

У меня есть UITableView, загружающий его данные из Интернета, и во время загрузки данных имеется несколько ячеек, чтобы указать процесс. Каждая ячейка получила UIImageView, внутри которого я хочу постоянно вращаться.Spinning UITableViewCells

Внутри UITableViewController я получил это:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection: (NSInteger)section 
{ 
    //there are three "default" cells 
    return self.datasource.count > 0 ? self.datasource.count : 3; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if(self.datasource.count) 
    { 
    //return a cell with loaded data 
    } 
    else 
    { 
     LoadingTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"LoadingIndicationCell"]; 

     return cell; 
    } 
} 

LoadingTableViewCell имеет * .xib файл с соответствующим эталонным выходом на UIImageView, называемый "круг"

- (void)awakeFromNib { 
    self.circle.alpha = .3f; 
    self.spinning = NO; 
    [self startSpin]; 
} 
- (void) spinWithOptions: (UIViewAnimationOptions) options { 
    NSLog(@"SPINNIN'"); 
    // this spin completes 360 degrees every 2 seconds 
    [UIView animateWithDuration: 0.5f 
          delay: 0.0f 
         options: options 
        animations: ^{ 
         _circle.transform =  CGAffineTransformRotate(_circle.transform, M_PI/2); 
        } 
        completion: ^(BOOL finished) { 
         if (finished) { 
          if (_spinning) { 
          [self spinWithOptions: UIViewAnimationOptionCurveLinear]; 
         } else if (options != UIViewAnimationOptionCurveEaseOut) { 
          [self spinWithOptions: UIViewAnimationOptionCurveEaseOut]; 
         } 
        } 
       }]; 
} 

- (void) startSpin { 
    if (!self.spinning) { 
     self.spinning = YES; 
     [self spinWithOptions: UIViewAnimationOptionCurveEaseIn]; 
    } 
} 

- (void) stopSpin { 
    self.spinning = NO; 
} 

Это, кажется, спина 2 раз, а затем останавливается. На консоли есть 6 выходов «SPINNIN», по два для каждой ячейки.

Я очень новичок в развитии iOS, старался понять это весь вечер. Кстати, что произойдет с этими объектами ячейки, когда они будут заменены клетками с загруженными данными? Где я тогда называю stopSpin?

+0

, кажется, что ваш код не проблема. вы можете добавить еще один лог и точку останова в блок завершения для отладки. также обратите внимание, что когда-нибудь блок завершения вызовет с завершенным = НЕТ. например, когда ячейка будет заменена, сначала она будет удалена, это остановит анимацию, и завершение завершения обратного вызова будет NO – SolaWing

+0

@SolaWing благодарит вас за подсказку по «финишу». Я слегка отредактировал метод spinWithOptions, и он работает с этого момента. – Alexander

ответ

0

В конце концов я закончил с этим кодом:

- (void) spinWithOptions: (UIViewAnimationOptions) options { 
    if([self isHidden]) [self stopSpin]; //stop spinning when the cell got replaced 
    // this spin completes 360 degrees every 2 seconds 
    [UIView animateWithDuration: 1.0f 
         delay: 0.0f 
        options: options 
       animations: ^{ 
        _circle.transform = CGAffineTransformRotate(_circle.transform, M_PI/2); 
       } 
       completion: ^(BOOL finished) { 
         if (_spinning) { 
          [self spinWithOptions: UIViewAnimationOptionCurveLinear]; 
         } 
       }]; 
} 
+0

Что по-другому, и почему это другое? –

+0

@MatthiasBauch я перестал полагаться на «законченный» флаг в блоке завершения, что сделало его бесконечным. Но когда ячейка была удалена из таблицы, это isHidden метод вернет YES, и когда это произойдет, я прекращу вращение. – Alexander

 Смежные вопросы

  • Нет связанных вопросов^_^