Reproduzca un sonido de tic mientras se desplaza UITableView (algo así como el UIPickerView)

Estoy buscando una manera de implementar un ruido de marca que se reproduce cada vez que una celda pasa un punto específico en la pantalla (el centro).

He estado vertiendo en la web pero no puedo entender por dónde empezar? Cualquier dirección sería genial (no estoy buscando a alguien para solucionarlo por mí, solo alguna idea o consejo)

¡Gracias!

ACTUALIZAR:

Aquí está el código que he implementado usando su método, pero no funciona correctamente. Nunca parece llamar al nslog "Tick" que significa que algo en los parameters es incorrecto. Mis celdas de vista de tabla tienen 100 píxeles de alto. ¿Algún consejo?

- (void) scrollViewDidScroll:(UIScrollView *)scrollView { } - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { self.myTimer = [NSTimer scheduledTimerWithTimeInterval:1/30.0 target:self selector:@selector(checkTableViewScrollPosition) userInfo:nil repeats:YES]; } - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView { if (self.myTimer) [self.myTimer invalidate]; self.myTimer = nil; } int currentContentOffset = 0; int tableviewCellHeight = 100; int thresholdValue = 50; - (void) checkTableViewScrollPosition { int contentOffsetValue = _contentTableView.contentOffset.y; NSLog(@"%d", contentOffsetValue); if ((contentOffsetValue + tableviewCellHeight / 2) % tableviewCellHeight <= thresholdValue && currentContentOffset != contentOffsetValue ) { NSLog(@"Tick!"); NSLog(@"%d", contentOffsetValue); currentContentOffset = _contentTableView.contentOffset.y; } } 

Comience agregando una propiedad a su controller de vista para almacenar la ruta de índice de la celda en el centro de la tabla:

 @property (nonatomic, strong) NSIndexPath *currentIndexPath; 

Luego, asegúrese de que su controller de vista adopte el protocolo UIScrollViewDelegate y que su tableView sea accesible a través de la propiedad self.tableview (o cambie el código a continuación a la propiedad apropiada para tableView).

Luego, implementa el siguiente método desde UIScrollViewDelegate :

 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { // Find the indexPath of the cell at the center of the tableview CGPoint tableViewCenter = self.tableview.center; tableViewCenter = [self.tableview convertPoint:tableViewCenter fromView:self.tableview.superview]; NSIndexPath *centerCellIndexPath = [self.tableview indexPathForRowAtPoint:tableViewCenter]; // "Tick" if the cell at the center of the table has changed if ([centerCellIndexPath compare:self.currentIndexPath] != NSOrdenetworkingSame) { NSLog(@"Tick"); self.currentIndexPath = centerCellIndexPath; } } 

el protocolo UITableViewDelegate ajusta a UIScrollViewDelegate , por lo que si está adoptando este protocolo puede implementar UIScrollViewDelegate - scrollViewWillBeginDragging y - scrollViewDidScroll para detectar el desplazamiento

Implementar el

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

método que forma parte del protocolo UIScrollViewDelegate al que se ajusta el protocolo UITableViewDelegate. En su implementación, verifique el contentOffset del contentOffset de scrollView, siempre que el contenido esté desplazado por la altura de una celda (arriba o abajo), reproduzca su sonido.

Puede comenzar comprobando la propiedad contentOffset de su TableView en el método scrollViewDidScroll: de su delegado de tableView

Configure un timer para ejecutarse a 30 fotogtwigs por segundo una vez que el método tableViewDelegate regrese

 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { self.myTickTimer = [NSTimer scheduledTimerWithTimeInterval:1/30.0 target:self selector:@selector(checkTableViewScrollPosition) userInfo:nil repeats:YES]; } 

tableViewDidBeginScroller y luego detener el timer una vez que llegue al método de delegado

 - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView { if (myTickTimer) [myTickTimer invalidate]; self.myTickTimer = nil; } 

A continuación, obtenga la tablaview.contentOffset e imprímalo para mostrarle toda la compensación de contenido a medida que vaya cambiando …

 - (void) checkTableViewScrollPosition { NSLog(@"tableview.contentOffset = %@", tableview.contentOffset); } 

Ahora tiene la compensación de contenido que emite los numbers correctos … haga un module en el contenido de la function basado en la altura de la celda de la tabla y podrá reproducir un sonido cada vez que cambie … recuerde que la compensación de contenido pasará de 0 – tableViewCellHeight * numberOfCells + headerHeight + footerHeight … aquí está el método completado:

 int currentContentOffset = 0; int tableviewCellHeight = 44; int thresholdValue = 5; void checkTableViewScrollPosition { NSLog(@"tableview.contentOffset = %@", tableview.contentOffset); if ((tableview.contentOffset+tableviewCellHeight/2.0) % tableviewCellHeight <= threshHoldValue && currentContentOffset != tableview.contentOffset) NSLog(@"Tink"); [[NSSound soundNamed:@"Tink"] play]; currentContentOffset = tableview.contentOffset; } 

Reproduzca el sonido dentro del método tableableViewDelegate tableView: willDisplayCell: forRowAtIndexPath :. Este método se invoca cada vez que una nueva célula está a punto de aparecer.