2011-09-09 3 views
1

J'ai une vue défilante en forme de tableau avec des sections. La structure de mise en page est sur la bonne image. enter image description hereComment synchroniser des animations avec l'animation CAScrollLayer

La vue a une couche de défilement qui comporte des sections. Chaque section a un titre et des lignes. Lorsque je fais défiler vers le haut, le titre de la section doit rester visible au-dessus des lignes, comme dans UITableView. Lorsque je fais défiler le calque, je passe la position de défilement à la section, de sorte qu'il peut ajuster la position du titre.

De l'avis:

- (void)updateContentVerticalScrollPosition 
{ 
    [CATransaction begin]; 
    [_scrollableContentLayer scrollToRect:scrollRect]; 
    [_section setVerticallScrollPositionInSuperlayer:_verticalScrollPosition]; 
    [CATransaction commit]; 
} 

Dans la section mettre à jour la position du titre:

_titleLayer.position = CGPointMake(0, titleLayerVerticalPosition); 

Il fonctionne, mais même si j'utilise une transaction la couche de défilement et le mouvement de titre avec une vitesse différente. Donc, il semble que le calque de titre soit flottant.

Est-ce que quelqu'un sait comment synchroniser les animations du calque de défilement et de la couche de titre?

Répondre

1

J'ai trouvé la solution. NSScrollLayer n'utilise pas la fonction de minutage par défaut pour animer le défilement, mais une fonction linéaire. Donc, tout ce dont nous avons besoin est de changer l'action pour @ "position" clé.

CABasicAnimation* animation = [[CABasicAnimation alloc] init]; 
animation.duration = 0.25; 
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];  
[_titleLayer setActions:[NSDictionary dictionaryWithObject:animation forKey:@"position"]]; 
[animation release]; 
Questions connexes