正如Apple鼓勵使用塊,我想要做一系列動畫,在它們之間有聲音輸出,這基本上像一個todolist,我想用塊來實現它。AVAudioplayer和Blocks
不幸AVAudiosplayer似乎不支持onCompletion塊,以UIAnimation的方式。
所以我認爲將這種支持添加到AVAudioplayer會很酷。
所以香港專業教育學院不,這是什麼
頭
#import <AVFoundation/AVFoundation.h>
@interface AVAudioPlayer (AVAudioPlayer_blockSupport)
typedef void(^AVPlaybackCompleteBlock)(void);
@property (nonatomic, copy) AVPlaybackCompleteBlock block;
-(id)initWithContentsOfURL:(NSURL*)pathURL error:(NSError**)error onCompletion:(AVPlaybackCompleteBlock) block;
-(void)setBlock:(AVPlaybackCompleteBlock)block;
-(AVPlaybackCompleteBlock)block;
-(void) executeBlock;
@end
,做此之後,M檔
#import "AVAudioPlayer+blocks.h"
@implementation AVAudioPlayer (AVAudioPlayer_blockSupport)
-(id)initWithContentsOfURL:(NSURL *)pathURL error:(NSError **)error onCompletion:(AVPlaybackCompleteBlock)block {
self = [[AVAudioPlayer alloc] initWithContentsOfURL:pathURL error:error];
self.block = block;
return self;
}
-(void)setBlock:(AVPlaybackCompleteBlock)block {
self.block = block;
}
-(AVPlaybackCompleteBlock)block {
return self.block;
}
-(void) executeBlock {
if (self.block != NULL) {
self.block();
}
}
@end
,我想我應該能夠創造這樣一個新的audioplayer :
player = [[AVAudioPlayer alloc] initWithContentsOfURL:pathURL error:&error onCompletion:block];
這似乎是工作。
現在在委託中會嘗試執行附加的塊。
if (localPlayer.block) {
[localPlayer executeBlock];
}
不幸的是,當我嘗試運行代碼時,它似乎無限循環。我想用合成代替,但那不適用於類別...
如果我沒有實現該方法我堅持'-[AVAudioPlayer setBlock:]: unrecognized selector sent to instance
這是有道理的,因爲沒有該名稱的方法。
我發現這個Block references as instance vars in Objective-C所以我想我應該能夠附加屬性(我的塊)到AudioPlayer。