2014年7月30日水曜日

覚えておくと力強いiOS開発の概念・用語

ぱっと思いつくやつを。


・View・ViewControllerの階層構造

iOSの画面の作りが基本的にどうなっているかというもの。
ViewControllerというのはその名の通りそれだけでは何かを表示するものではありません。
その上に様々なViewが重なっていて、それらを管理しているものです。
また、様々なViewControllerには一番根底となるViewが存在しそのViewに対してButton等のViewをaddsubview(viewの追加)するわけですが、

Androidとは違って、多くの人々がイメージしているlayer構造に近いかと思います。


・UINavigationController

OpenGLとかで開発していない限り、だいたいこれが根底にいます。
画面遷移にあたることも管理してくれており、大別して、

・push 画面を上に重ねる感じ(結果次ページに遷移する動作)
・pop 上に重ねた画面を捨てる感じ(結果戻る動作)

があります。というかだいたいこれで遷移は完結できます。

他にもこのControllerにはNavigationItemやらNavigationButtonやらがデフォルトでついてます。
よくあるUIの最上部の44pxあたりの領域のことですね。


・UITabBarViewController

まだまだ現役UIで、下部に何個かボタンが並んでいるUIです。
Facebookアプリなんかは現在これにあたります。

一つ一つのボタンがUIViewControllerをもっているのが通常の作りで、ボタンを押すとそれが切り替わります(画面が切り替わる)。

これと上記のUINavigationControllerを組み合わせることができますが、
少々やっかいな動作をみせることがあるのでお気をつけください。


・plist

property listのこと。中身はただのxml形式なんですが、xcodeでわかりやすく編集ができます。
string,array,dictionaryをサポートしており、定数をおくDB的な感覚で使えます。


・info.plist

プロジェクトに直結したplist。BundleNameやUrlSchema,デフォルト言語など、様々なデフォルト設定ができます。


・Localizable.strings

ローカライズ対応が容易にできます。
NSLocalizedString(KEY,nil)


・Deligate

移譲するという意味。例えば上記のViewController間等で使われ、Classをまたいで命令をしたりする。


・AppDeligate

アプリの親玉のようなクラス。アプリ起動時等の肝心要なところをつかさどっている。



とりあえず、ここらへんのもうちょい詳細を知っておくとエンジニアとの会話がスムーズになること間違いないです。

Facebook連携

見事にハマりました。

はまった大きな要因が、ググって出てくる古い情報。
そもそも最新を追え!ってことなんですが。。。

Facebookログインの仕様変更により、Permissionの解放が厳しくなりました。

で、いままでのようにbirthdayなんかのPermissionをログイン時に許可とろうとすると、
エラーレスポンス返されます。

エラーの原因を調べていてぐるぐるしてましたが、
なんてことはなくFacebookからPermission使用許可を取得しないといけないということでした。


アップルのようにアプリを審査してもらう必要があります。

Permissionによっては14日もかかるだとか。





誕生日ぐらいよくね?w

2014年7月10日木曜日

tableviewやcollectionviewでcellに画像を非同期で表示する場合

これが昨今利用シーンの多いこと。

一覧性を重視しているUITableViewやUICollectionViewでは当然のことかと改めて気づかされました。

注意点は至極簡単、

collectionView:cellForItemAtIndexPath:等のデリゲートメソッドで
imageview.image=nil
をして非同期で持ってくる画像を毎回初期化してやることです。

二つのViewはcellを再利用するという便利な機能がついていますが、
それゆえに非同期で画像を表示しようとすると、
表示したいindexがずれてしまうことがあるのです。
再利用された際に次の画像が表示されるまで前の画像が残ってしまうんですね。

これと collectionview:didEndDisplayingCell:forItemAtIndexPath: とかで
cellの画像を初期化するのを併せて行うといいのではないでしょうか?


collectionViewの造りに日々感動しております。




最近プログラミングのロジックの勉強を改めてしたいなぁと漠然とおもっとります。。。

2014年7月3日木曜日

Blur効果

blur = かすんだ
とかいう意味。

曇りガラス風とかいったりします。

ios7からやたらAppleがプッシュしてますね。
ios8をちょっといじりましたが、猛プッシュ。
透過が効いているところは、ほぼ全部ブルアってます。
xcodeまでブルアってて「いる?」ってなりました。


これ、実装が大変なんです。

Appleがソースを提供してくれないせいで、
ほぼ自前実装になるんです。(と思っていた)

ios7時点でUINavigationBarとかデファルトでブルアってるんですが、
[UIView setBlur:0.8]
みたいなことはできません。

一昨年はこのBlur効果を使用するため、
UINavigationBarを無理やりUIViewとして使うみたいな方法をしていた人がいたそうなのですが、
見事リジェクトされたそうです。


ここで驚愕の事実。


この記事を書いている際に、改めてBlurについていろいろと調べてみたら、


現在ではWWDC2013にてアップルがサンプルソースを提供してくれているため、
それを使用するのが簡単です。

https://developer.apple.com/downloads/index.action?name=WWDC%202013

UIImage+ImageEffects でcategoryとして提供されています。

もっと様々な傾斜をかけようとしたら、やはり自前実装ですね。

裏のキャプチャとって加工してはりつけたり。


という事実が発覚。

今日まで上記のアップルサンプルを知らずに、めんどくさい処理やってました。
絶望しました。。。




気を取り直して、

最近はparallaxな効果に興味がでてきて、実装してみたものの周りの評判がワルめ。

デスヨネー!