Vous devez faire défiler manuellement tableView au lieu de scrollToRowAtIndexPath
parce que cette animation utilise son propre intervalle de temps et qu'il est très difficile, voire impossible, de modifier son intervalle de temps.
Je suis donc en train d'implémenter une API pour ce genre de problèmes et j'ai créé une application de démonstration pour vous avec un défilement fluide comme vous le souhaitez.
Vous devez utiliser une minuterie externe qui se déclenche toutes les 1 secondes et une minuterie interne qui se déclenche toutes les 0,03 secondes. La hauteur de ma tableRow étant de 30, j'ai calculé l'intervalle de la minuterie interne comme suit :---
Déplacez 30 pixels pendant 1 seconde, puis Déplacement d'un pixel pendant 0,33 seconde à l'intérieur de la minuterie interne.
La minuterie interne sera invalidée et déclenchée toutes les 1 secondes comme initialisé dans la minuterie externe.
Et la minuterie interne effectuera le mouvement de la cellule.
dial4 est un tableView
Jetez un coup d'œil à mon code.
#define rowHeight 30
-(void)startCounter
{
outertimer=[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(snapCell) userInfo:nil repeats:YES];
}
-(void)stopCounter
{
[outertimer invalidate];
}
-(void)snapCell
{
NSLog(@"Initialize Internal timer %i",secLsb);
secLsb++;
if (secLsb==10) {
[dial4 setContentOffset:CGPointMake(0, 0) animated:NO];
secLsb=0;
NSLog(@"dial content offset y is %f",dial4.contentOffset.y);
}
[internaltimer invalidate];
internaltimer=[NSTimer scheduledTimerWithTimeInterval:0.03
target:self
selector:@selector(automaticScroll)
userInfo:nil
repeats:YES];
}
-(void)automaticScroll
{
NSLog(@"val is & y ======== %f",dial4.contentOffset.y);
[dial4 setContentOffset:CGPointMake(dial4.contentOffset.x,dial4.contentOffset.y+1) animated:NO];
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return rowHeight;
}
Jetez un coup d'œil à Compteur de temps