状态机

作者: 孙凯iOS | 来源:发表于2019-04-09 17:33 被阅读0次

    状态机

    #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];
    

    相关文章

      网友评论

          本文标题:状态机

          本文链接:https://www.haomeiwen.com/subject/aruiiqtx.html