2010-04-21 156 views
1

我有一个滚动视图,可以滚动到两边(只有左和右,而不是上下)。 每当滚动视图将X像素移动到任一侧时,我都想播放短时间的声音(小于一秒)。UIScrollView滚动播放声音

这怎么办?代码示例将不胜感激......

感谢,

回答

4

这里是我使用的代码:我添加了SoundEffect.h和SoundEffect.m文件到我的项目

(你可以在网上找到它们)。通过增加<UIScrollViewDelegate>到视图控制器的.h文件和设置的UIScrollView的相关出口

SoundEffect *soundEffect; 

然后,我安装我的UIViewController作为我的UIScrollView的委托: 然后,我创建了一个声音效果实例。

-(void)viewDidLoad方法,我初始化我的声音效果:

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

然后,我实现了这两种方法:

#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]; 
    } 
} 

我所需要的声音效果,每55个像素火要么方向,但您可以将其更改为适合您需要的恒定值。 它对我很好,希望它也能帮助其他人...

+0

这实际上不起作用,因为scrollViewDidScroll不够快。我的滚动视图在1秒内滚动6页,但只获得三次点击。任何想法使这种方法更快火吗? – 2012-07-23 13:03:50

1

尝试分配你的viewController作为滚动视图的委托,并添加-scrollViewWillBeginDragging:方法。

+0

但是这样只会发出一次声音,不是吗?我希望无论何时滚动视图将X像素移到任何一边,声音都会启动。我正在考虑在这个方法中初始化一个定时器,它将每隔0.1秒检查一次,检查视图是否超过了X像素,并在相关的委托方法中停止该定时器。但我想知道是否有更好的方法来做到这一点... – 2010-04-21 13:01:18

+0

你想要声音重复的视图拖动?你可以使用scrollViewDidScroll :. – 2010-04-21 13:14:14

+1

谢谢。我尝试使用scrollViewDidScroll:方法,它的效果很好... – 2010-04-21 15:14:32