2014-01-25 5 views
1

Протокол CAMediaTiming определяет свойство timeOffset, которое должно установить дополнительное смещение времени анимационного или анимированного слоя. Установив layer.speed = 0, можно вручную управлять временем анимации, установив layer.timeOffset на заданное значение.Невозможно управлять временем анимации подслоя UITableViewCell

И мне удалось сделать это в обычном режиме просмотра, однако, когда я пытаюсь сделать это (установленное смещение по времени слоя), когда слой является потомком слоя UITableViewCell в это не имеет никакого эффекта.

Вот быстрый фрагмент, чтобы вы могли видеть, чего я пытаюсь достичь, а что - нет.

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 

    [tableView deselectRowAtIndexPath:indexPath animated:NO]; 

    CALayer *layer = [CALayer layer]; 
    layer.frame = CGRectMake(0, 0, 80, 80); 
    layer.backgroundColor = [UIColor redColor].CGColor; 
    layer.opacity = .1f; 
    [cell.contentView.layer addSublayer:layer]; 

    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"]; 
    animation.toValue = (id) [NSNumber numberWithFloat:1.f]; 
    animation.duration = 1.f; 
    [layer addAnimation:animation forKey:nil]; 
    layer.timeOffset = 0.7f; 
    layer.speed = 0.f; 

} 
+0

Это только время, когда это не работает, или вы можете рассказать нам больше о том, что происходит? –

+0

Да - все свойства, определенные в работе протокола CAMediaTiming, за исключением 'timeOffset' – wczekalski

ответ

0

Вы должны разрешить запуск анимации, прежде чем вы сможете контролировать свое время. Используйте блок с очень небольшой задержкой для этого:

CABasicAnimation* ba = [CABasicAnimation animationWithKeyPath:@"opacity"]; 
ba.removedOnCompletion = NO; 
ba.duration = kAnimationDuration; 
ba.autoreverses = YES; 
ba.repeatCount = HUGE_VALF; 
ba.fromValue = [NSNumber numberWithDouble:kInitialAlpha]; 
ba.toValue = [NSNumber numberWithDouble:kFinalAlpha]; 
[self.layer addAnimation:ba forKey:@"opacity"]; 
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
    double offset = self.alphaOffset * (kAnimationDuration/kNumAlphaOffsets); 
    self.layer.timeOffset = offset; 
}); 
Смежные вопросы