2014/03/16

[ios]20pxの謎

XcodeのStoryboardエディタ(という名前かどうかは知らんが)でViewのサイズを変更していると、マウスが引っかかるところがある。
上の方で引っかかるのに気付いていたので、きっとステータスバーの高さで引っかかるようになるのだろうと思っていたのだが、どうも上下左右で引っかかるようだった。


全部、20px(Retinaでいうところの40px)だった。
これはなんの領域なのだろうか?
キーワードがわからないので検索もできていない。。。


自分でアプリを作るのであればどうでもよいのだけど、お仕事でやるときは仕様書がどさっと来て、順番にやってたら最後に「これって実現できるのか・・・?」みたいなのが出てくることもあるので、できることできないことを記憶レベルで知っておきたいのだ。
実装ができるのなら人にお願いして作ってもらえばいいんだけど、OSの制限とかでできないとか時間が非常にかかるとかだったら交渉しないといかんし。
その制限がiOSはバージョンで違いすぎるので、憂鬱になるのだ。

2014/03/05

[nfc]NFC PLUGも、TypeBとFeliCaだ

久しぶりにNFCの話を。

http://www.dnp.co.jp/news/10096658_2482.html

大日本印刷さんが、NFC PLUGなる組込み部品を発売するそうだ。
DNPさんは、私が板橋に住んでたときに会社があったなぁ、というくらいの印象だったが、当時はNFCもFeliCaも興味なかったよなぁ。しみじみ。

さて、このNFC PLUGだが、名前からするとSony社のFeliCa Plugを想像するし、機能も似ているようだ。
しかし、機能的な近さで言えば、Panasonic社のMN63Y12xxシリーズの方が近い。

  • サポートするのは、TypeBとFeliCa
  • 有線I/FはI2C
  • 磁界から電力を得られる
  • 不揮発メモリを内蔵

まあ、磁界から電力を得られるのに不揮発メモリがなかったら意味がないだろうから、この2つはセットかな。
それはよいとして、なぜDNPさんもPanasonicさんも、TypeBとかFeliCaをサポートして、TypeAはしないんだろう?
NXPの壁があるのか。
あるいは、技術的にTypeAはこういう部品が作りにくいのか。

 

こういう部品は、どういう用途が良いのだろう?
省電力で、範囲が狭い。
ほとんど触れんばかりの使い方になる。

ぱっと思いついたのは、ペースメーカーだ。
私が知ってる頃のペースメーカーは、VVIだのDDDだのとあったが、埋め込んだ人の体の上から何かをあててプログラミングをしていた(と、新人の現場研修で教わったように思う)。
人体向けであれば、さすがに汎用のプロトコルを使わない方が良いんだろうけど、近接はそういう使い方もいいんじゃないかな、と思った。

[nfc]FeliCa Linkだってー!?

http://www.sony.co.jp/Products/felica/business/press/140304.html

 

・・・ごめん、帰ってきたばかりで、明日も出勤なんだ。
だから、このくらいの記事で我慢してくれ・・・。

NFC PLUGといい、FeliCa Linkといい、組込みばっかりだな。
なにかあるのかな?

2014/03/02

[ios]Objective-Cではヘッダにクラス変数が書けないようだ

まだ理解不足もあるが、たぶんObjective-Cのヘッダにはクラス変数が書けないようだ。
やりたかったのは、C++でいえばこんな感じのこと。

--- ヘッダファイル ---
class TestA {
private:
  static bool mBoolVar;

public:
  static bool getBoolVar() { return mBoolVar; }
};


なんでそんなことがしたかったかというと、端末が4インチかどうかを持たせたいと思ったからだ。
毎回UIScreenを呼ぶほどでもないので、起動時に4インチかどうかの結果を保持して、あとは保持した情報だけ呼んだ方が早そうだ、と思ったのだ。
じゃあ@propertyでstrongとreadonlyを指定すればいいやん、と思ったのだが、strongはオブジェクトじゃ無いとダメだ、と怒られた。
それに、@propertyだとインスタンスを作らんといかんような気がしてきた。

じゃあ、ヘッダにクラス変数を書いて、inline関数にすればいいかな、と思ったのが今回の件だった。
Cで書いて、グローバル変数にしてexternとかでもよいのかもしれないが、あんまりやりたくないので、mファイルに書くやり方にしておこう。
普通のやり方にしておけば、コンパイラがうまいこと最適化してくれるかもしれない。

[ios][[UIScreen mainScreen] bounds]のheightが480になるのはimageがないためだった

Storyboardを機種ごとに分けるには、まず機種を見分けねば。
というわけで調べていると、画面が4inchかどうか・・・というよりも、画面の高さが568pxかどうかで見分けるようだった。
うーん、なんかすっきりせんが・・・。


    int height = [[UIScreen mainScreen] bounds].size.height;

こんなので画面の高さが取れるらしいのでシミュレータで試したのだが、4インチのシミュレータを立ち上げても480にしかならない。
シミュレータやアプリの設定をさんざん見たのだが、特に何も無い。
が、他のアプリは568になってる。
うーむ・・・。

こんな回答があった。
http://stackoverflow.com/questions/12505910/why-my-uiscreen-mainscreen-bounds-size-return-480-in-ios6
確かに、このプロジェクトはLaunch Imageを削除していた。
他のプロジェクトからImages.xcassetsをもらってくると、568になった。
納得いかん・・・・。
削除しなければいいだけの話ではあるのだが、デバイスの情報が取得できないってところがね。

なお、取得値が480になるだけじゃなく、アプリの画面サイズもそうなってしまう。
前回取ったスクリーンショットがそうだ。
「頭の部分が長くなっただけ」と書いたが、上下にスペースが入ってセンタリングされるような画面になっていた。

Form Factor : 3.5inch / iOS6.1(Retina 3.5inch) Emulator


Form Factor : 3.5inch / iOS6.1(Retina 4inch) Emulator


Form Factor : 4inch / iOS6.1(Retina 3.5inch) Emulator


Form Factor : 4inch / iOS6.1(Retina 4inch) Emulator

4インチのエミュレータで下までスクロールするようになった。
Form Factorが4インチで作ると3.5インチ画面で下までスクロールしないのはそのままだ。
やはりStoryboardを分けるとか、Auto Layoutとか、何かやらんといかんようだな。

[ios]StoryBoardの3.5inch/4inchボタン

(注意:後日談あり)

前回、UITextViewを貼り付けただけなのにうまくいかない、ということを書いた。
フリックしても下の方まで見えない、という話だ。
なんとなくUITextViewのサイズを変更してみたら、あら不思議。見えるではないか。

StoryBoardのエディタで部品を貼り付けようとマウスで動かしていると、ほどほどのところで引っかかったような動きをしてくれる。
説明がうまくできんが、画面の端っことか、中央とか、そんなところで「ここら辺に境目がありますよ」みたいな引っかかりをしてくれるのだ。
それを見て、画面いっぱいにUITextViewを貼っていたのだけど、見えている部分はそれよりも狭いようだ。
そして、エディタの下の方に3.5inch/4inchのForm Factor切り替えボタン(と呼ぶのかどうか知らんが)の状態でも変わるようだった。

Form Factor : 3.5inch / iOS6.1(Retina 3.5inch) Emulator

Form Factor : 3.5inch / iOS6.1(Retina 4inch) Emulator

Form Factor : 4inch / iOS6.1(Retina 3.5inch) Emulator

Form Factor : 4inch / iOS6.1(Retina 4inch) Emulator


うーん、よくわからん・・・。
Form Factorの設定は、エディタの見栄えだけじゃなく動作にも影響があることはわかった。
それはわかったけど、なんで4inchのエミュレータを使っても全部見えないんだ?
なんか、頭の部分が長くなっただけという感じがする。

自動的に3.5inch/4inchのサイズ調整をやってくれるかと思ってたんだけど、そうもいかないんだな。
では、両方に対応したアプリを作りたくて、ソースファイルで調整するような処理を書きたくない場合はStoryBoardを分けるしか無いのか?

などと思ったが、そもそもStoryBoardとアプリの関係がよくわかっていないので、そこからですな。