iOS弾幕ユニットLNDanmakuMasterの具体的な使用


LNDanmakuMasterは、軽量の弾幕プレーヤであり、プレーヤーを作成することによってトラックを作成する->弾幕を追加して弾幕再生を行い、軌道を豊かにしながらカスタムレールをサポートします。入ってきた弾幕の視層には要求がない(任意のView/Layer)。様々な(現在は3)弾幕分布戦略を提供します。トラックグループを使って特殊弾幕の再生をサポートします。分布戦略に対応した弾幕seek戦略を提供する。
Githubリンク:LNDanmakuMaster
このリンクを直接ダウンロードして、上の豊富なDemoを実行したり、Demoコードを参考にして自分の弾幕プレイヤーを実現したり、直接にCocoappodsを使うことができます。👇
Cocoappods

pod 'LNDanmakuMaster'
弾幕機構
1.駆動機構
ビデオプレーヤの更新率は通常29 frame/sで、弾幕プレーヤは同じリフレッシュ周波数を採用すると、カードの直感があります。そのため、弾幕プレーヤは通常自分のリフレッシュ駆動を使います。あるいはUVew animation、あるいはCADisplayLinkです。CADisplayLinkは詳細、進捗制御に対応していますので、ここではCADisplayLinkを選択します。
LNDanmakuClockは、CADisplayLinkをカプセル化して、いくつかの一時停止、廃棄の制御方法を追加しました。このクロックの出力は前回のDisplayLinkから今回のdisplayLinkに戻る時間です。
2.進捗制御メカニズム
LNDanmakuMasterは全体的に時間定義の進捗を採用しています。これも他の弾幕フレームとの主な違いの一つです。私たちのすべての進捗制御、追従制御、多忙度制御は時間を使って計算されます。
時間変数を空間変数に置き換える利点は、
  • もしあなたの軌道は直線ではないならば:もし弾幕が水平軌道で再生することができることを望むならば、円形軌道で再生することができて、角速度を提供します。また、出線速度をあげます。時間単位を使うなら、運行の総時間を与えるだけです。
  • 曲線軌道の2つの弾幕間の間隔を先に制御すると、空間間隔は曲線の長さを計算する必要があり、時間間隔は直線と同じである。
  • はいくつかの判断をする時、空間条件を使って判断をするなら、速度、時間に関連した大量の乗除法を行う必要があります。使用時間は加減法だけが必要かもしれません。具体的に優勢があるかどうかは分かりませんが、加減法が早いと直感的に感じられます。
  • B駅のような中間に一列の弾幕があるなら、速度は必要なく、表示する時間だけで十分です。
  • つまり、速度体系の代わりに時間体系を使うことは、複数の軌道の進捗制御を統一する良い方法である。
    3.更新メカニズム
    Clockの出力によって、安定したフィードバックが得られます。どれぐらいの時間が経ったかを知ることができます。弾幕の更新過程は、弾幕の残りの生存時間の中で、過ぎたばかりの時間を差し引いて、差し引いた残りの時間が総時間の割合で弾幕の位置、大きさなどの情報を更新することになります。
    以上の3つの主要なメカニズムの紹介を経て、もう一つの弾幕フレームを実現するすべての主要なロジックがあります。残りはいくつかのモジュールの細分と細部の彫刻です。
    モジュール分業
    LNDanmakuMasterは、弾幕フレーム全体を以下のいくつかの部分に分割します。
    モジュール名
    クラス名
    コメント
    プレーヤー
    LNDanmakuPlayer
    プレーヤーは、弾幕フレーム全体の他のコンポーネントの整合に相当し、外部に呼び出し方法とタイミングエージェントを提供する。
    配付器
    LNDanmakuAbstractDisplatch
    Displatchはレールを管理するヘッドのように、レールの集合状態によって弾幕をどこに置くかを決めるのが一番いいです。
    トラックコントローラ
    LNDanmakuAbstractTrackController
    レールコントローラーは労働者のように定期的に工具を使って自分の弾幕を守り、自分の状態をDispactchにフィードバックします。
    軌道
    LNDanmakuAbstractTrack
    Trackの職責は完全に軌道の定義に合致しており、弾幕を維持せず、どの弾幕弾幕もこの軌道上でのリフレッシュの位置、大きさ、アフィニティ変換などの属性と時間進捗のマッピングだけを維持しています。空間情報と時間情報の関数のようです。
    スタイル
    LNDanmakuAbstractAttributes
    スタイルは弾幕の担体であり、弾幕のすべての情報を含んでいます。例えば、生存時間、位置、携帯の業務モデル、展示時に使うView/Layerなどです。はい、そうです。Collection View Attributesと似ています。プレーヤーの特性によってタイムスタンプ情報が追加されました。
    追加のコンポーネント
    モジュール名
    クラス名
    コメント
    軌道グループ
    LNDanmakuTrackGroup
    このセットは特殊な弾幕を作って再生するためのもので、Playerのようなより小さいユニットです。内部にはDispackControllerといくつかのTrackControllerが含まれています。
    このコンポーネントの意味:
    いくつかの弾幕放送は軌道に対して一定の要求があります。また、軌道は自分の再生した弾幕に対して一定の要求があります。例えば、プレゼントの軌道は中央ではなく、スクリーンの上部にしか現れません。あるいは、円形の軌道は長い文字ではいけません。そうすると、そんなに丸く見えなくなります。
    一つは二つの面からこの問題を考えると、軌道選択弾幕/弾幕選択軌道の苦境に陥るが、実際には両方が存在する。この二つの問題は最終的には軌道組を使って解決し、ユーザーは一つの軌道の組を指定し、Player層を越えて直接にこの軌道組に向けて弾幕を投げることができる。この弾幕はこの軌道グループが含む軌道にのみ出現する可能性がある。この機能はDemoの中の虹の形の軌道の中で体現されています。私は7つの色の弾幕をそれぞれ7つの軌道グループの中に入れます。(各軌道グループには3本の軌道があり、2つの隣の軌道グループには共通の中でその重なり合う軌道があります。)。
    使用例
    以上では、このフレームのすべての重要なコンポーネントを紹介しました。ここでは、最も簡単な弾幕プレーヤを構築する過程を例に挙げて説明します。
    1.ダnmakuPlayerを怠惰にロードする:
    これは少なくともしなければならないので、いかなる配置をする必要がなくて、それは正常に働くことができます。
    
    - (LNDanmakuPlayer *)danmakuPlayer
    {
      if (!_danmakuPlayer) {
        _danmakuPlayer = [[LNDanmakuPlayer alloc] init];
      }
      return _danmakuPlayer;
    }
    
    2.このプレーヤーのコンテナViewをスクリーンに追加します。
    
      [self.view addSubview:self.danmakuPlayer.containerView];
    
    3.このPlayerにレールを追加します。
    Playerはカスタムをサポートしています。主にカスタムレールと弾幕スタイルに反映されています。だから、すべてのレールは自分の手で加えられています。init/view DidLoadなど初期化のタイミングでこれを行うことができます。Playerが怠惰にロードする時も一緒に追加できます。
    
    - (void)addTrack
      for (int i = 0; i < 20; i++) {
        LNDanmakuHorizontalMoveTrackController *horizontalTrackController = [[LNDanmakuHorizontalMoveTrackController alloc] init];
        horizontalTrackController.horizontalTrack.startPosition = CGPointMake(0, 44.f + 30.f * i);
        horizontalTrackController.horizontalTrack.width = self.view.frame.size.width;
        horizontalTrackController.spaceTimeInterval = 0.f;
        [self.danmakuPlayer addTrack:horizontalTrackController];
      }
    }
    
    4.プレーヤーを動かす!
    今このプレーヤーは外部のインターフェースから適当な弾幕をつけてスクリーンに再生できます。
    
    - (void)startPlay {
      [self.danmakuPlayer start];
    }
    
    5.簡単な弾幕を上げてみましょう。
    
    (void)addRandomDanmaku
    {
    LNDanmakuAttributes *attributes = [[LNDanmakuAttributes alloc] init];
    UIView *colorView = [[UIView alloc] init];
    colorView.backgroundColor = [UIColor redColor];
    attributes.presentView = colorView;
    attributes.trackTime =4.f;
    attributes.size = CGSizeMake(88.f, 44.f);
    [_player insertAttributes:@[attributes]];
    }
    
    このフレームワークはできるだけ正常なロジックに合う方法を使って、各コンポーネントの分業を定義して、それが一番快適であることを保証します。そして、できるだけ複雑に見えるロジックをカプセル化しました。もちろん、合理的なフレームワークは下限が低く、上限も高いと思います。不変のルールではなく、(疾風をコントロールしている男性は成功したキャラクターと言えるでしょう)。だから、ユーザーはこれらのロジックを深く検討する必要があります。外部から簡単にカスタマイズして、自分の特色を出すことができます。
    後からどんどん更新します。使用上または原理上の文章紹介の枠組みは、実現するためには多くの優れた技術がありませんが、コードの優秀さはどれぐらいの深さや優れた言語特性を使っているかによって決まるのではなく、コードを書く論理と考え方です。そして、複雑な論理がないのに、規則をたくさん使う部品(もっと気持ちが悪いのは業務線を強く押してください)を心の底から抵抗しています。だから、この部品はできるだけ少なく規則を使って、できるだけシンプルなコードを使って、もっと豊富な機能を持つ方向に発展します。
    最後にいくつかのデモの中の効果図を添付します。
    横のレール

    ポップ動画トラック

    ウェーブトラック+トラックグループ

    ハートレール

    ここで、iOS弾幕コンポーネントLNDanmakuMasterの具体的な使用についての記事を紹介します。もっと関連するiOS弾幕コンポーネントLNDanmakuMasterの内容を紹介します。私達の以前の文章を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。