我有一个相当基本的问题。UIImageView
我的屏幕上有几 (5)张图像。当我单击一个按钮时,我想将每个图像更改为其他图像。我还想在每个图像更改时播放声音。
所以我基本上想要在每个图像发生变化时发出咔哒声。
问题是,由于某种原因,如果我说 5 个图像,
声音会先播放 5 次,然后图像会发生变化。
这就像图像只有在控制权返回给用户进行输入时才会刷新。
一旦我告诉它要显示什么图像,我如何“强制”它刷新图像?
我是 iphone/macworld 的新手,所以请放轻松 :-)
瑞克
我有一个相当基本的问题。UIImageView
我的屏幕上有几 (5)张图像。当我单击一个按钮时,我想将每个图像更改为其他图像。我还想在每个图像更改时播放声音。
所以我基本上想要在每个图像发生变化时发出咔哒声。
问题是,由于某种原因,如果我说 5 个图像,
声音会先播放 5 次,然后图像会发生变化。
这就像图像只有在控制权返回给用户进行输入时才会刷新。
一旦我告诉它要显示什么图像,我如何“强制”它刷新图像?
我是 iphone/macworld 的新手,所以请放轻松 :-)
瑞克
如果您正在寻找定期刷新 UIImageView 的方法,可以参考以下内容: http ://www.shanison.com/2010/12/25/uiimageview-load-remote-image/
听起来您可能在异步播放声音时从磁盘或网络上加载图像。也许您正在使用AudioServicesPlaySystemSound
with UIImage +imageWithContentsOfURL:
?实际的图像加载和声音播放代码在这里最有用。
这就像图像只有在控制权返回给用户进行输入时才会刷新。
这正是发生的事情。UI 在主线程上更新,因此在您的代码运行时不会发生更新。
为了实现您想要的,您将需要计时器。查看 NSTimer 文档。您需要创建一个计时器来触发更改第二个图像的方法,然后将计时器重新排队以更改您的第三个图像。有一种方便的方法可以创建您需要的计时器:+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats
[NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(updateImage2:) userInfo:nil repeats:NO];
那么,你有一个方法:
- (void) updateImage2(NSTimer*)theTimer
{
//Update image 2 here
// play sound 2 here
[NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(updateImage3:) userInfo:nil repeats:NO];
}
我会留给你来实现方法 updateImage3: ;-)
像这样运行更新使主线程有机会更新 UI。
当我想更改 uiimageview 背景并刷新它,然后继续执行代码时,这对我有用:
-(void)imgTapped_event:(UIImageView*)imgViewTapped
{
imgViewTapped.backgroundColor=[UIColor whiteColor];
//let the system update ui changes
[NSRunLoop currentRunLoop]runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.0f]];
//continue your code execution, play sounds etc...
//my helper method to play sound
[self playSound:@"goodAnswer" sync:YES loops:0];
}