uka.apple のすべての投稿

デアゴスティーニ商法作業管理での132日目作業

今日の作業は「警告ウィンドウの表示」です。

javascriptのalertやconfirmを、WKWebViewで表示対応します。Swiftのバージョンは5.0.1です。

class ViewController: UIViewController, WKUIDelegate {

    private var _webView : WKWebView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        _webView = WKWebView()
        _webView.uiDelegate = self
〜以下略〜

上記の赤い部分でデリゲートを指定し、alertは以下のプロトコルを実装することにより、

func webView(_ _webView: WKWebView, runJavaScriptAlertPanelWithMessage alert: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) {
        
        let alertController = UIAlertController(title: "", message: alert, preferredStyle: .alert)
        let otherAction = UIAlertAction(title: "OK", style: .default) {
            action in completionHandler()
        }
        alertController.addAction(otherAction)
        self.present(alertController, animated: true, completion: nil)
    }

confirmは以下のプロトコルを実装することにより、アプリで表示可能になります。

func webView(_ _webView: WKWebView, runJavaScriptConfirmPanelWithMessage confirm: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (Bool) -> Void) {
        
        let alertController = UIAlertController(title: "", message: confirm, preferredStyle: .alert)
        let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) {
            action in completionHandler(false)
        }
        let okAction = UIAlertAction(title: "OK", style: .default) {
            action in completionHandler(true)
        }
        alertController.addAction(cancelAction)
        alertController.addAction(okAction)
        self.present(alertController, animated: true, completion: nil)
    }

javasriptによりalertやconfirmを使うと


if (window.confirm('どっちにするんですかゴルァ?')) {
    alert("やるのかゴルァ?");
} else {
    alert("ごめんなさい。");
}

キャンセルを押します。

はい、アプリ上で表示されましたね。

以上です!

デアゴスティーニ商法作業管理での131日目作業

今日は、「RAND EDGE」が効かない事がある対策を行いました。

conwayのライフゲームは、ライフが一定のルールに従って状態が変化する様がとても面白いゲームです。

全てのライフをランダムに初期化した後、しばらくはライフが変化し続けて楽しめるのですが、一定時間が経つと状態が固定して動きが無くなってしまいます。

「RAND EDGE」とは、画面端のライフを常にランダマイズ処理して、常に動きをつけて楽しめるようにした機能です。

この画像には alt 属性が指定されておらず、ファイル名は スクリーンショット-2019-05-31-8.15.44-1024x574.png です

で、この機能なんですが、「LOOP」という画面端を繋げる機能をオフにすると効かなくなったので今日はその調査と対策を行いました。(ちなみに原因は、「LOOP」オフの場合には画面端が繋がらないのでランダマイズ範囲が狭すぎたためです。)

これで、どんな状況でも永遠にライフが動き続ける様子を、ぼーっと眺めて楽しめます。

ʕ•̫͡•ʕ*̫͡*ʕ•͓͡•ʔ-̫͡-ʕ•̫͡•ʔ*̫͡*ʔ-̫͡-ʔ

デアゴスティーニ商法作業管理での130日目作業

今日の作業は「UIの表示が範囲外になる事がある対策」です。

今作っているWebGLライフゲームアプリのUIは、画面が横長の場合はUIが隠れてしまいます。

右側のSIZE、SPEED、COLORのその下の部分が見えていませんね。このUI部分をドラッグしてスクロールする事で、見えない部分を表示する事ができます。

ライブラリなしで自力で作り込んでいます。

で、ウィンドウサイズが変更された時に、場合によってはUIの表示範囲がおかしくなって何も表示されないことがあったため、今日はこの部分を調整していました。

具体的にはスクロールの最大量、現在のスクロール位置を確認して、範囲外には行かない制御ですね。コードにすると以下のような形になります。


if (0 < this.scrollMax) {
    if (this.scroll < 0) {
        this.scroll = 0;
    } else if (this.scrollMax < this.scroll) {
        this.scroll = this.scrollMax;
    }
} else {
    this.scroll = 0;
}

これでUIの表示が消えることはなくなりました!

今日は以上です!

本家デアゴGTR-NISMO箱積状況:4箱 (38号,39号,40号,41号)

デアゴスティーニ商法作業管理での129日目作業

今日の作業は「iPhoneアプリ化で起動時に画面を触るとずれる対策」です。

今作っているWebGLのガワネイティブ アプリはシングルページアプリケーション(SPA)なので、スクロールは不要です。

なので、WkWebViewのスクロール関連機能をオフにしました。

Swiftのバージョンは5.0.1(xcodeは10.2.1)です。

_webView = WKWebView()

// スクロール禁止
_webView.scrollView.isScrollEnabled = false
_webView.scrollView.panGestureRecognizer.isEnabled = false
_webView.scrollView.bounces = false

バージョンが5になってまた書き方が変わったようです。プロパティ名が変わった?のかな。

正直もう変わらないでほしいですね。頻繁に変わりすぎるからWebGLとかに避難する方向で行っています。

以上です!

デアゴスティーニ商法作業管理での128日目作業

今日の作業は「iPhoneアプリ化で音が出ない原因を調査して対策」です。

・・・

・・

mp3ファイルへのパス間違えていただけでした。

[二二ミ
  ∥   ヾ
  ∩∧∧ ヾ_
  || ゚∀)  | | 
 /⌒二⊃= | |
(  ノ  %∴∵ ⊂⌒ヽ
  ) ) )   ) ̄ ̄(0_)
  \)) (___) (_(

自作の音再生jsライブラリの中にmp3へのパスを書くんですが、自分で作っていてすっかり忘れてました。

正しいパスに直したら、全く何の問題もなくiPhoneアプリ内で音が鳴りました。

アプリ化が原因で鳴らないと思って真剣に悩んでたのに・・・

以上です・・・

本家デアゴGTR-NISMO箱積状況:4箱 (38号,39号,40号,41号)

デアゴスティーニ商法作業管理での127日目作業

今日の作業は「ライブラリロード直後にUIを閉じる」です。

尚、iPhoneアプリとして動くようになったので、今日の画像はiPhone実機のスクリーンショットです。

今作成しているWebGLのライフゲームは、「Library」というボタンがあって、有名なライフパターンを手軽に呼び出せる機能があります。

この機能でパターンをロードした後、ライフがどのように動くか鑑賞するのですが、その際にUIが邪魔になります。

はい、ご覧のようにUIでライフが隠れちゃってますね。そこで、ライブラリを呼び出した際は、UIを自動で閉じるようにしました。

今日はこれだけ!

本家デアゴGTR-NISMO箱積状況:4箱 (38号,39号,40号,41号)

やばい、本家の方の箱が溜まってきた・・・

デアゴスティーニ商法作業管理での126日目作業

今週の予定です。

127日目:ライブラリロード直後にUIを閉じる
128日目:iPhoneアプリ化で音が出ない原因を調査して対策
129日目:iPhoneアプリ化で起動時に画面を触るとずれる対策
130日目:UIの表示が範囲外になる事がある対策
131日目:「RAND EDGE」が効かない事がある対策
132日目:警告ウィンドウの表示
133日目:予備日(次の週の予定を立てる)

iPhoneアプリ化して昨日遊びまくってたら色々とバグっぽいのが出てきたので今週はそれを直して行きます。

本家デアゴGTR-NISMO箱積状況:3箱 (38号,39号,40号)

デアゴスティーニ商法作業管理での125日目作業

今日の作業は「jsの暗号化 — その2」です。

暗号化は一応昨日簡単なものを実装完了しました。今日はもう一段階難しい仕組みで追加実装しようと思いましたが、暗号化しても破られるときは破られるし、何よりあんまり難しい事すると

自分自身で復号化不能になる場合がある

ので追加実装はやめておきました。

今日はiPhoneにインストールしたアプリで色々遊んでいたのですが、結構ボロボロと直さなきゃならない点に気づいたので来週から改善作業を行いたいと思います。

作業が終わりそうで終わらないな・・・。早くリリースしたいなぁ。

本家デアゴGTR-NISMO箱積状況:3箱 (38号,39号,40号)

デアゴスティーニ商法作業管理での124日目作業

今日の作業は「jsの暗号化 — その1」です。

WebGLのアプリはその仕組み上、クライアント側で動くのでソースコードを見れますし、やろうと思えばソースを丸ごとパクることも可能です。

パクられるほどのソースコードでも無い気もしますが、万が一バズって大人気アプリになったら困るので、パクリ防止用の仕組みを入れておこうと思います。

万が一にもバズって大人気アプリになることはないと思うけど。

ヽ(`д´)ノ うわーん

暗号化したソースコードは以下のような感じです。

明日も引き続き暗号化作業を行います。

本家デアゴGTR-NISMO箱積状況:3箱 (38号,39号,40号)

デアゴスティーニ商法作業管理での123日目作業

今日は「効果音の再生 — その2」です。

昨日実装したmp3の再生について、mp3をiPhoneアプリ内へ埋め込んだ場合にWKWebViewから問題なく再生出来るかテストしました。

結果、ダメでした。音の再映もネイティブコード書かないといけないみたいです。WebGLアプリってどこでも動くと思ったのに!

      ∧_∧  トンファーキ~ック! 
    _(  ´Д`) 
   /      )     ドゴォォォ _ / 
∩  / ,イ 、  ノ/         ∧ ∧―= ̄ `ヽ, _ 
| | / / |   ( 〈 ∵. ・(   〈__ > ゛ 、 
| | | |  ヽ  ー=- ̄ ̄=_、  (/ , ´ノ \ 
| | | |   `iー__=―_ ;, / / /
| |ニ(!、)   =_二__ ̄_=;, / / ,’ 
∪    /  /       /  /|  | 
    /  /       !、_/ /   〉 
    / _/           |_/ 
    ヽ、_ヽ 
 

まあ、愚痴ってもしょうがないのでちょこちょこネイティブコード書いていこうと思います。最悪音はなくてもいいかな・・・

本家デアゴGTR-NISMO箱積状況:3箱 (38号,39号,40号)