2010-04-21 5 views
1

J'ai une vue défilante qui peut être défilée sur les côtés (uniquement à gauche et à droite, pas de haut en bas). Je souhaite jouer un son court (moins d'une seconde) chaque fois que la vue défilée est déplacée de X pixels de chaque côté.Lecture du son lorsque UIScrollView fait défiler

Comment cela peut-il être fait? Des exemples de code seront grandement appréciés ...

Merci,

Répondre

4

Voici le code je:

J'ai ajouté les fichiers SoundEffect.h et SoundEffect.m à mon projet (vous pouvez les trouver en ligne). Ensuite, je créé une instance d'effet sonore:

SoundEffect *soundEffect; 

Puis, je configurer mon UIViewController en tant que délégué de mon UIScrollView en ajoutant <UIScrollViewDelegate> au fichier .h du contrôleur de vue et le réglage de la sortie correspondante du UIScrollView.

Dans la méthode -(void)viewDidLoad, j'initialisés mon effet sonore:

NSBundle *mainBundle = [NSBundle mainBundle]; 
soundEffect = [[SoundEffect alloc] initWithContentsOfFile:[mainBundle pathForResource:@"Tik" ofType:@"wav"]]; 

Et puis, je mis en œuvre ces deux méthodes:

#pragma mark - 
#pragma mark Scroll View Delegate Methods 

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 
{ 
    lastScrollPosition = scrollView.contentOffset.x/55; 
} 

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    if ((int)(scrollView.contentOffset.x/55) != lastScrollPosition1) 
    { 
     lastScrollPosition1 = scrollView.contentOffset.x/55; 
     [soundEffect1 play]; 
    } 
} 

je besoin de l'effet sonore au feu tous les 55 pixels soit direction, mais vous pouvez changer cela à une valeur constante qui correspond à vos besoins. Cela fonctionne très bien pour moi, et j'espère que ça va aider les autres aussi ...

+0

Cela ne fonctionne pas car scrollViewDidScroll ne se déclenche pas assez vite. Mon scrollview défile 6 pages en 1 seconde mais obtient seulement trois clics. Des idées pour rendre cette méthode plus rapide? –

1

Essayez d'attribuer votre viewController en tant que délégué de la vue de défilement, et en ajoutant une -scrollViewWillBeginDragging: méthode.

+0

Mais cela ne fera que flatter le son, n'est-ce pas? Je veux que le son commence chaque fois que la scrollview déplace X pixels de chaque côté. Je pensais à l'initialisation d'une minuterie dans cette méthode qui va vérifier toutes les 0,1 seconde environ, si la vue a traversé plus de X pixels et arrêter cette minuterie dans la méthode déléguée pertinente. Mais je me demande s'il y a une meilleure façon de le faire ... –

+0

Vous voulez que le son se répète lorsque la vue est déplacée? Vous pouvez utiliser scrollViewDidScroll :. –

+1

Merci. J'ai essayé d'utiliser la méthode scrollViewDidScroll: et cela fonctionne très bien ... –

Questions connexes