iOSの開発でもっと外部のライブラリを使おう!

こんにちは編集長です。今回は「実装する前に探す!」を徹底しているKingさんから、iOSアプリ開発でぼんやり画面を「実装する前に探す!」した場合の生々しいレポートをお送ります。

皆さん、はじめましてこんにちは。
iOSアプリの開発を担当しているSEのKingと申します。

アドウェイズには大体二種類のエンジニアがいまして、それは『たくさんコードを書く人』と『あまり書かない人』です。白状しますと、僕はそれほど書かないほうです。

「それは、駄目でしょう?」

「そうですね。。。いつかクビになるかも。」

実際の開発では全てのコードを書かないとモノを作れないわけではないですよね。
標題のとおり、もっと検索能力を極めて外部のライブラリーを使えば、形にすることは十分出来る筈。そうです、ネットに公開されているライブラリーを使用すれば目的の機能の実装も楽になるし(期待感)、きっとコードもきれいだし(期待感)、開発速度もグッと上がりますね(期待感)。なかなかいいじゃないですか!(期待感絶好調!)

ある日、上司からとあるアプリの画面を見せられて

「このようなぼんやりした効果の画面を作りたいんだけど、やりかたわかる?」

「うん。。そうですね、作ったことがないですけど、ちょっと考えてみます。」

作り方がわからないので、まずは検索してみましょう!

ぼんやり」➡ 英語に翻訳すると ➡ 「blur」ですね。

ということで、まずはGitHubで「blurView」を検索してみたら、一杯出てくるじゃん!
「DRNRealTimeBlurView」というライブラリーが人気があるらしくて、サンプルコードをDLしてみたら、ちゃんと動くじゃん〜ちょっと気になるところがあるけど、まぁ、いいや、これを使おう!

//Creates a live blur view

self.blurView = [[DRNRealTimeBlurView alloc] initWithFrame:CGRectMake(60, 110, 200, 200)];

self.blurView.blurRadius = .2f;

[self.view addSubview:self.blurView];

この三行を追加して、自分のコードに入れてみたら、なんと、ちゃんと動くじゃないすか!
合計30分。ラクショウじゃ!

〜 2週間後 〜 

「なんかおかしいよ〜、実機でテストすると画面がカクカクになって、全然動かない!ちょっと調べてもらっていい?」

おっと、どういうことなんだ!?
実機でテストして調べたところ、ぼんやり画面が出てる間はCPU負荷がなんと「116%」!?結構頑張りましたね。。。

ちょっとライブラリーの中身を見てみましょう。そもそもぼんやり画面表示をどう実装しているのか。。。

ソースコードの「UIImage+BoxBlur」と「DRNRealTimeBlurView」を読むとロジックが分かりました。

ぼんやり画面self.blurViewを画面に追加する前に、まず背景のViewをスクリーンショットとして保存します。それにぼんやり処理をかけて画面上に乗せています。背景が変更されたら新しいぼんやり画面を作らないといけないので、kDRNRealTimeBlurViewRenderFpsという変数へ1秒間に何回ぼんやり画面を更新するのか設定します。この更新の際に、随時スクリーンショットを保存してぼんやり画面を作ることになります。CPUの負荷が高いってことは、きっと更新頻度が高すぎるってことですね。 更新頻度を下げて見ると、やはりスムーズに動きました。

原因は分かったけど、他に解決方法がないのかと検索したところ、同じ作者が作った「UIERealTimeBlur」という最新のライブラリーを発見しました。新バージョンならきっと直っているに違いないと使ってみましたが、変わらなかったorz...。iOS7の場合にデフォルトのUIToolbarをひとつ追加するだけの修正でした。「やはりもっと元のところから調べないと」と思った時に、記事に一番下に書いてある「Credits」のところに気付がつきました。

http://indieambitions.com/idevblogaday/perform-blur-vimage-accelerate-framework-tutorial

このブログに書いてある通りに実装したところ、無事に動きました。
そもそも今回はリアルタイムに更新しなくても大丈夫だったんです。
※アニメーションが必要であれば、「ANBlurredImageView」参考にすればいいですね。

問題は解決しましたが、ちょっと時間かかってしまいました。。。

外部ライブラリーを使う時に、気をつけた方が良い事:

  •ある程度ロジックを知らないと何かあった時に原因を探すことが大変
  •先に元の記事などを読んだほうがよいかもしれない。
  •ちゃんと定期に更新しているライブラリーを使ったほうがよい

まぁ、当たり前の事だと思いますが、皆さんも気をつけてどんどんライブラリーを使ってください。