다음은 내가 원하는대로 정확하게 작성한 (이전 ARC) AVAudioPlayer의 확장입니다.
헤더 AVAudioPlayer+FadeControl.h
:
#import <Foundation/Foundation.h>
#import <AVFoundation/AVFoundation.h>
@interface AVAudioPlayer (FadeControl)
-(void)fadeOutWithDuration:(NSTimeInterval)inFadeOutTime;
@end
그리고 소스 AVAudioPlayer+FadeControl.m
:
#import "AVAudioPlayer+FadeControl.h"
#define kFadeSteps 20.0
@implementation AVAudioPlayer (FadeControl)
-(void)fadeOutWithDuration:(NSTimeInterval)inFadeOutTime
{
NSTimeInterval fireInterval = inFadeOutTime/kFadeSteps;
float volumeDecrement = 1.0/kFadeSteps;
float originalVolume = self.volume;
self.volume = originalVolume - volumeDecrement;
[self retain];
[NSTimer scheduledTimerWithTimeInterval:fireInterval target:self selector:@selector(fadeOutTimerMethod:) userInfo:[NSNumber numberWithFloat:originalVolume] repeats:YES];
}
- (void)fadeOutTimerMethod:(NSTimer*)theTimer
{
float volumeDecrement = 1.0/kFadeSteps;
if (self.volume > volumeDecrement)
{
self.volume = self.volume - volumeDecrement;
}
else if ([theTimer isValid])
{
[self stop];
NSNumber* originalVolume = [theTimer userInfo];
self.volume = [originalVolume floatValue];
[theTimer invalidate];
}
else
{
[self stop];
[self release];
}
}
@end
그것은이 playWithFadeInDuration:
방법 광고에 사소한해야한다. ARC 프로젝트에서 사용하려면 -fno-objc-arc
을 파일의 컴파일 플래그에 추가하기 만하면됩니다.
@PratikPatel 예, 이것은 'AVAudioPlayer'를 사용하고 있다고 가정합니다. 헤더 파일 일명 인터페이스 파일에서 위의 예제에서와 같이'AVAudioPlayer * audioPlayerMain'으로 선언 할 것입니다. – wigging
어떻게 할 수있는 MPMusicPlayerController ????? –
@Pratik Patel과 동일 MPMusicPlayerController를 사용하여 어떻게 할 수 있습니까 ????? –