Monthly Archives: February 2014

Xcode:Frame Rectangle と Alignment Rectangle の違い

Storyboard でオブジェクトを配置する際に Auto Layout を使用する方も増えてきていることかと思います。 その際、インスペクタでオブジェクトの View の種類を Frame Rectangle と Alignment Rectangle(Layout Rectangle) から選べるようになっています。 一見なんの違いか分からなかったので、今回はこの違いをメモしておきます。 Frame Rectangle と Alignment Rectangle の違い Frame Rectangle 影を含むオブジェクトの矩形サイズが「Width」と「Height」に表示される。 Alignment Rectangle (Layout Rectangle) オブジェクト自体の矩形サイズが「Width」と「Height」に表示される。 iOS アプリの場合はウインドウの影を考慮した制約を与えなくてよいため、デフォルトの Frame Rectangle のままで問題ないかと思います。 まとめ Auto Layout は慣れないうちはとてつもなく不便なものに感じてしまい、直接コードで配置したくなります。 リリース当初と比べ Xcode6 あたりから随分と使いやすくなってきました。これからは頑張って使っていこうと思います。 この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

Apple:iPhone 6 と iOS8 と新しいカテゴリのプロダクト

iOS7.1が間もなくリリースされようとしています。 初のメジャーアップデートなので期待したいところですが、ベータ版を見る限り特に目新しいものはなく、フラットデザインを性急に採用したため生じていたアラが取れ、より洗練されたOSに仕上がっていると感じました。 それと同時に iPhone 6 と iOS8 の情報も散見し始めています。iOS7.1 リリース前ですが、ここら辺の情報を一旦整理してみたいと思います。 iPhone 6 と iOS8 と新しいカテゴリのプロダクト iOS 7.1 Siri iOS7.1ベータ5では発音がより人に近い自然な発音に変わっているらしいです。 ソフトウェアキーボード 「shift」「caps lock」のデザイン変更があります。この変更によりiOS7.0のときよりも視認性が向上しています。 カレンダー イベントリストビューの切り替えボタンのデザイン変更。小さな変更ですが、改良されています。 リリース日 2014年03月(予定)です。ここ数年3月には新製品の発表イベントをおこなっている Apple ですが、iOS7.1リリース時に合わせて何か発表するのでしょうか。 iPhone 6 サファイアガラス iPhone(iPod touch)ユーザーなら一度は目にする(経験する)残念な現象が、本体落下により液晶画面にヒビが入ってしまった無残なiPhoneの姿ではないでしょうか。 「iPhone」「落下」で画像検索すると膨大な数のイメージがヒットすることから、問題の深刻さが伺えます。 液晶のカバーガラスがサファイアガラスになれば、こういった事例もみないで済むようになります。実現性は高いのではないでしょうか。 曲面ディスプレイ 人間工学的には画面が凹状になっているものを想像しますが、この場合、本体を平面に置いた時のゆらゆらは誰も望まないような気がします。 ただ、iPhone 3G の背面が手に馴染むデザインは、現在でも根強く支持する意見を聞きます。現在のソリッドなデザインから、曲面を取り入れた手に馴染むデザインへの回帰は、可能性としては十分考えられるのではないでしょうか。 この曲面ディスプレイに関する情報に関しては iPhone というよりは、後述するウェアラブルデバイスに採用されるものが iPhone 6 に波及しているだけかもしれません。 大画面液晶 ジョブズが望まなかった画面の大型化ですが、現AppleのCEO、ティム・クックは「否定はしていない」そうです。 ただ、現行 iOS での左上にある「戻る」ボタンがギリギリ片手で届くか届かないかの位置が、更に遠くなると両手での操作が必須となってしまいます。 また、開発者にとっても今以上に後方互換性の対応に追われることになり、ジョブズ同様あまり歓迎できるものではありません。 カメラ 日本発の今では当たり前となってしまった携帯電話のカメラですが、iPhone 6 では1000万画素以上のカメラを内蔵し、レンズの明るさがF1.8となるみたいです。画素数向上による恩恵は説明するまでもないですが、レンズが明るくなればより暗い場所で撮影できるようになり、従来より速いシャッターを切ることも可能になります。 また、iPhone 5 で問題視されていた紫フレア問題も解決されていることでしょう。 iWatch 睡眠の専門家や運動生理学者をリクルート App Store の睡眠や起床をサポートするiPhoneアプリは、iWatchにより全て純正の機能として置き換えらるでしょう。また、先行する NIKE+ を上回る提案をしなければいけないという高いハードルを Apple はどうやって超えてくるのか楽しみです。 バッテリー関連 充電方式はワイヤレス充電が示唆されており、汎用規格のQi等の磁気誘導式が採用される可能性が高い(MacRumors)とのことです。また、この記事によれば太陽光や人の運動エネルギーを利用し充電させる可能性もあるみたいです。 これらの技術は、iPhoneやその他のAppleプロダクツにフィードバックが可能なので楽しみです。 ネーミング 開発当初から噂されている iWatch ですが、そもそも iWatch という名前でリリースするのでしょうか。 iTime とか iActivity とか iBand でもいいような気がします。 iOS 8.0 コードネーム 「okemo」らしいです。アメリカ合衆国のバーモント州にある山の名前です。Mavericks 以降はネタに困り地名になりましたが、個人的にはネコ科シリーズの方がカッコ良かったと思ってます。 Healthbook 歩数、距離、消費カロリー、体重などのフィットネスデータや、血圧、心拍数、血糖値などの健康管理データを記録、管理出来るらしいものの、斬新な機能とは思えない健康管理アプリにも感じます。しかし、プロダクトベンダーである Apple ならではのアイデアや提案が楽しみでもあります。 デザイン iOS 6 から iOS 7 ほどの変化はありませんが、ネットにはいくつかのコンセプト画像が出回っています。 まとめ Appleが今年発表すると噂されている新しいカテゴリのプロダクトが、時計なのかテレビなのか、それとももっと別の何かなのかは想像できません。しかし、少なくとも iPhone 6 と iOS8 は同時に発表する可能性があり、その iOS8 はウェアラブルデバイスとの連携を視野に入れた機能が実装されていることに間違いはないはずです。 今年は何が出てくるのかとても楽しみです。 この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

Xcode:フラットデザインなら必須!アプリのアイコンの光沢を削除する(Xcode 5.0 以降 iOS 7 対応)

一昔前であれば光沢やシャドウによる効果が必須でしたが、現在では Windows8 のメトロや iOS 7のフラットデザインのようにミニマムなデザインが主流です。 よってXcodeから生成されるアイコンのグロスエフェクト(光沢効果)が不必要な方も多いかと思います。この機能はinfo.plistで効果のオンオフが可能ですのでメモしておきます。 アプリのアイコンの光沢を削除する ここでは Xcode5 で iOS7 のアプリを開発していることを前提として説明します。 Project -> TARGET を開く Infoタブ を選択する Icon already includes gloss effects を YES にする 項目の一覧に Icon already includes gloss effects がない場合は「+」より項目が追加できる まとめ デベロッパーは常に新しいことを受け入れることに積極的ですが、ユーザー側は iOS7 のフラットデザインがチープで受け入れられないという声も未だに耳にします。 また、このご時世にIE6対応を生業とする方もいるようですが、それでもいつかは淘汰されます。新しいものにはなんでも食らいついていく姿勢でいきたいものですね。 この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

Objective-C: これで解決!ARCを使用しReceived memory warningが出た時の対処方法

iOSアプリの開発がある程度進んだ段階で Received memory warning の警告が出力されるものの、とりあえず動くからいいや、と見て見ぬふりをする開発者も多いのではないでしょうか。私もその中の一人でした(笑) たとえアプリが正常に動作しているように見えても、気持ちのいいものではないですし、放置できる問題ではありませんので解決策をメモします。 Received memory warningが出た時の対処方法 ここではARCを使用し開発を行っていることを前提に話を進めます。比較的解決しやすいと思われる順に解説します。 デバイスを再起動させてみる そもそも開発しているアプリの問題ではなく、他のアプリのメモリリークの影響により警告が出ているであればこれで解決するはず。 UIScrollViewでページングしている場合 見えていないページは removeFromSuperView を行っているか確認する。 CGImageRef,CGImageContext を使用している場合 ARCを使用していてもこれらは明示的に開放する必要がある。 UIImage を imageNamed で生成している場合 imageNamed を使用した記述例(リソースファイルがキャッシュされるため、表示は高速だがメモリを食う) imageNamed を使用しない記述例(リソースファイルはキャッシュされないが、表示が遅くなる場合がある) UImageView 使用後に nil を代入している場合 オブジェクトと image プロパティそれぞれに nil を代入する必要がある その他の対策 UIView を addSubView した場合も、一時的に表示するようなものであれば不必要になったら removeSubView をする まとめ ARCだからメモリ管理はおまかせという姿勢ではなく、言語の特徴やARCの守備範囲をしっかり理解しておく必要があるということでしょうか。 結局、ARCを使用するしないに関わらず、後片付けはきっちり行いましょうということだと思います。 この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

Objective-C:プロトコルを使用しクラスにDelegateを実装するサンプル

クラス間のデータの受け渡しの中でもよく目にするDelegateですが、Objective-C初心者の方でもソースコードをパターン化して覚えれば簡単に実装することが出来ます。パターンの繰り返しで自然と言語に対する理解も深まるのではないでしょうか。 ここでは分かりやすく、MainiewController と MyClass 間での Delegate を使ったデータの受け渡しをパターン化しメモしておきます。 プロトコルを使用しクラスにDelegateを実装する デリゲート(プロトコル)とは? DelegateはObjective-Cのプロトコル機能を使ってオブジェクト間でメッセージのやりとりを行うための仕組み。Delegate自体は機能ではない。 サンプルコードで行っていること MainViewController で MyClass のインスタンス myclass を生成 インスタンス myclass から MyClass のメソッド callMyMethod を実行 MyClass のメソッド callMyMethod から MainViewController の myMethod が呼ばれる サンプルコード MainViewController.h MainViewController.m MyClass.h MyClass.m まとめ デリゲートがどう実装され、何をやっているのかを理解すれば、アプリ制作時のコーディングの幅が劇的に広がると思います。頑張って体得しましょう。 この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。