У меня есть 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?
, кажется, что ваш код не проблема. вы можете добавить еще один лог и точку останова в блок завершения для отладки. также обратите внимание, что когда-нибудь блок завершения вызовет с завершенным = НЕТ. например, когда ячейка будет заменена, сначала она будет удалена, это остановит анимацию, и завершение завершения обратного вызова будет NO – SolaWing
@SolaWing благодарит вас за подсказку по «финишу». Я слегка отредактировал метод spinWithOptions, и он работает с этого момента. – Alexander