我是Object C的新手,我有两个问题,但我无法在stackoverflow上找到答案。
我的iOS应用很简单,屏幕上有一个按钮,如果用户点击它,它将会:
播放声音
获取2个抽头之间的时间间隔(毫秒)。
感谢Owl,现在获取间隔的代码如下:
(长编码,因为我不明白什么是“UNIX时间戳”,我不知道在哪里/如何使用第二个代码。)
double dt1;
double dt2;
-(IBAction)Beated:(id)sender{
If (FB == 1) {
FB = 2;
NSDate *date = [NSDate date];
NSTimeInterval ti = [date timeIntervalSince1970];
dt1 = ti;
} else {
FB = 1
NSDate *date = [NSDate date];
NSTimeInterval ti = [date timeIntervalSince1970];
dt2 = ti;
double progress;
progress = dt2 - dt1;
int timeInMs = trunc(progress * 1000);
NSLog(@"Interval %d", timeInMs);
}
}
启动应用程序后,第一次播放声音时出现延迟,但在第一次点击后效果很好。如何阻止这种滞后?
播放声音的代码:
in .h
#import <AVFoundation/AVFoundation.h>
和
AVAudioPlayer *audioPlayer;
in .m
-(IBAction)Beated:(id)sender {
NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/ssn.wav", [[NSBundle mainBundle] resourcePath]]];
NSError*error;
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:$error];
audioPlayer.numberOfLoops = 0;
[audioPlayer play];
}
谢谢
答案 0 :(得分:1)
首先点击,
NSDate *date = [NSDate date];
NSTimeInterval ti = [date timeIntervalSince1970];
获取UNIX时间戳,
第二次点击,
NSDate *date = [NSDate date];
NSTimeInterval ti = [date timeIntervalSince1970];
获取另一个UNIX时间戳,然后从第二个时间戳中减去第一个时间戳。减法的结果就是你的进步。
然后使用此代码获取小时:分钟:秒
double progress;
int minutes = floor(progress/60);
int seconds = trunc(progress - minutes * 60);
代码礼貌:How to convert an NSTimeInterval (seconds) into minutes
从两次点击中获取两个NSDate然后使用,然后不需要减法,只需使用以下方法获取时间间隔。然后如上所示计算分钟和秒。
- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate
<强>替代地强>
使用components:fromDate:toDate:options:
课程中的NSCalender
方法。请参阅:Apple Doc。
Jus做了一个快速测试,它对我来说很有效。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
NSDate *date = [NSDate date];
NSTimeInterval ti = [date timeIntervalSince1970];
NSLog(@"%f",ti);
return YES;
}
2012-08-22 10:46:09.123 Test[778:c07] 1345596369.123665