我有一個需求來創建具有自定義模式的音頻級可視化器。我的圖像設置爲PNG的。 我目前的做法是這樣的基於音量級別反饋的UIImageView動畫
1)獲取麥克風
2)加載基於音量到UIImageView的相關圖像的音頻電平。
// audio level timer
self.levelTimer = [NSTimer scheduledTimerWithTimeInterval: 0.001 target: self selector: @selector(levelTimerCallback:) userInfo: nil repeats: YES];
ImageView的
- (void)levelTimerCallback:(NSTimer *)timer {
[self.audioRecorder updateMeters];
const double ALPHA = 0.05;
double peakPowerForChannel = pow(10, (0.05 * [self.audioRecorder peakPowerForChannel:0]));
lowPassResults = ALPHA * peakPowerForChannel + (1.0 - ALPHA) * lowPassResults;
//NSLog(@"Average input: %f Peak input: %f Low pass results: %f", [self.audioRecorder averagePowerForChannel:0], [self.audioRecorder peakPowerForChannel:0], lowPassResults);
if (lowPassResults > 0.0 && lowPassResults <= 0.05){
imgViewRecordAnimation.image = nil;
imgViewRecordAnimation.image = [UIImage imageNamed:@"anim1"];
}
if (lowPassResults > 0.06 && lowPassResults <= 0.10){
imgViewRecordAnimation.image = nil;
imgViewRecordAnimation.image = [UIImage imageNamed:@"anim2"];
}
if (lowPassResults > 0.11 && lowPassResults <= 0.15){
imgViewRecordAnimation.image = nil;
imgViewRecordAnimation.image = [UIImage imageNamed:@"anim3"];
}
if (lowPassResults > 0.16 && lowPassResults <= 0.20){
imgViewRecordAnimation.image = nil;
imgViewRecordAnimation.image = [UIImage imageNamed:@"anim4"];
}
if (lowPassResults > 0.21 && lowPassResults <= 0.25){
imgViewRecordAnimation.image = nil;
imgViewRecordAnimation.image = [UIImage imageNamed:@"anim5"];
}
if (lowPassResults > 0.26 && lowPassResults <= 0.30){
imgViewRecordAnimation.image = nil;
imgViewRecordAnimation.image = [UIImage imageNamed:@"anim6"];
}
if (lowPassResults > 0.31 && lowPassResults <= 0.35){
imgViewRecordAnimation.image = nil;
imgViewRecordAnimation.image = [UIImage imageNamed:@"anim7"];
}
if (lowPassResults > 0.36 && lowPassResults <= 0.40){
imgViewRecordAnimation.image = nil;
imgViewRecordAnimation.image = [UIImage imageNamed:@"anim8"];
}
if (lowPassResults > 0.41 && lowPassResults <= 0.45){
imgViewRecordAnimation.image = nil;
imgViewRecordAnimation.image = [UIImage imageNamed:@"anim9"];
}
if (lowPassResults > 0.46 && lowPassResults <= 0.50){
imgViewRecordAnimation.image = nil;
imgViewRecordAnimation.image = [UIImage imageNamed:@"anim10"];
}
if (lowPassResults > 0.51 && lowPassResults <= 0.55){
imgViewRecordAnimation.image = nil;
imgViewRecordAnimation.image = [UIImage imageNamed:@"anim11"];
}
if (lowPassResults > 0.56 && lowPassResults <= 0.60){
imgViewRecordAnimation.image = nil;
imgViewRecordAnimation.image = [UIImage imageNamed:@"anim12"];
}
if (lowPassResults > 0.61 && lowPassResults <= 0.65){
imgViewRecordAnimation.image = nil;
imgViewRecordAnimation.image = [UIImage imageNamed:@"anim13"];
}
if (lowPassResults > 0.66 && lowPassResults <= 0.70){
imgViewRecordAnimation.image = nil;
imgViewRecordAnimation.image = [UIImage imageNamed:@"anim14"];
}
if (lowPassResults > 0.71 && lowPassResults <= 0.75){
imgViewRecordAnimation.image = nil;
imgViewRecordAnimation.image = [UIImage imageNamed:@"anim15"];
}
if (lowPassResults > 0.76 && lowPassResults <= 0.80){
imgViewRecordAnimation.image = nil;
imgViewRecordAnimation.image = [UIImage imageNamed:@"anim16"];
}
if (lowPassResults > 0.81 && lowPassResults <= 0.85){
imgViewRecordAnimation.image = nil;
imgViewRecordAnimation.image = [UIImage imageNamed:@"anim17"];
}
if (lowPassResults > 0.86 && lowPassResults <= 0.90){
imgViewRecordAnimation.image = nil;
imgViewRecordAnimation.image = [UIImage imageNamed:@"anim18"];
}
if (lowPassResults > 0.86){
imgViewRecordAnimation.image = nil;
imgViewRecordAnimation.image = [UIImage imageNamed:@"anim19"];
}
}
但輸出不順暢作爲一個真正的可視化動畫。什麼應該是最好的方法?分享有更好的方法來做到這一點。
夫婦圖像
這聽起來像它可能與此問題相同:http://stackoverflow.com/questions/2834573/how-to-animate-the-change-of-image-in-an-uiimageview – dudeman
爲什麼你在設置圖像屬性之前每次將圖像設置爲零('imgViewRecordAnimation.image = nil;')? – arturdev