状态机

状态机

#import <TransitionKit/TransitionKit.h>
@property (nonatomic, strong) TKStateMachine *stateMachine;

static NSString * const kLoading = @"kLoading";
static NSString * const kPlaying = @"kPlaying";
static NSString * const kPause = @"kPause";
static NSString * const kFinish = @"kFinish";
    self.stateMachine = [[TKStateMachine alloc] init];
    
    ///加载中 状态
    TKState *loading = [TKState stateWithName:kLoading];
    [loading setDidEnterStateBlock:^(TKState *state, TKTransition *transition) {
        /// TODO
        NSLog(@"-----------------------");
        NSLog(@"loading - 1");
    }];
    ///播放状态
    TKState *playing = [TKState stateWithName:kPlaying];
    ///进入该状态
    [playing setDidEnterStateBlock:^(TKState *state, TKTransition *transition) {
        /// TODO
        NSLog(@"-----------------------");
        NSLog(@"playing - 1");
    }];
    ///离开该状态
    [playing setDidExitStateBlock:^(TKState *state, TKTransition *transition) {
        /// TODO
        NSLog(@"-----------------------");
        NSLog(@"playing - 2");
    }];
    
    ///暂停状态
    TKState *pause = [TKState stateWithName:kPause];
    [pause setDidEnterStateBlock:^(TKState *state, TKTransition *transition) {
        /// TODO
        NSLog(@"-----------------------");
        NSLog(@"pause - 1");
    }];
    ///播放完成状态
    TKState *finish = [TKState stateWithName:kFinish];
    [finish setDidEnterStateBlock:^(TKState *state, TKTransition *transition) {
        /// TODO
        NSLog(@"-----------------------");
        NSLog(@"finish - 1");
    }];
    ///添加所有状态
    [self.stateMachine addStates:@[loading, playing, pause, finish]];
    ///初始状态
    [self.stateMachine setInitialState:finish];
    
    ///关联事件
    TKEvent *loadingEvent = [TKEvent eventWithName:loading.name transitioningFromStates:@[playing, pause, finish] toState:loading];
    TKEvent *playingEvent = [TKEvent eventWithName:kPlaying transitioningFromStates:@[loading, pause, finish] toState:playing];
    TKEvent *pauseEvent = [TKEvent eventWithName:kPause transitioningFromStates:@[playing, loading] toState:pause];
    TKEvent *finishEvent = [TKEvent eventWithName:kFinish transitioningFromStates:@[loading, playing, pause] toState:finish];
    
    ///添加事件
    [_stateMachine addEvents:@[loadingEvent, playingEvent, pauseEvent, finishEvent]];
    ///激活
    [_stateMachine activate];

BOOL can = [self.stateMachine canFireEvent:kLoading];
[self.stateMachine fireEvent:kLoading userInfo:nil error:nil];
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 我们每天挑选优质文章、资讯推送给大家。 如果你觉得不错,可以支持我们,我们将提供更优质的内容与更好的体验。 ·赞助...
    尚欣阅阅读 175评论 0 0
  • 要说我童年的趣事?不要急!待我慢慢的告诉你!你要是听了,保证你百分百喷饭!哈哈哈!!! ...
    小小战马阅读 193评论 0 1
  • “演而优则导”,这使得很多演员在拍戏之余都会去尝试一种职业——导演。可事实上是,他们自己拍的戏的风头总是盖不过自己...
    三圈少女阅读 654评论 0 0