2013/09/23

iPhone 5s 購入しました

昨年の投稿からほぼ一年、予想通り恒例行事になりつつありますが、iPhone 5sを購入しました。

昨年は黒でしたので、今年は白/シルバーを選択。箱の表面が、3GS以来久しぶりに正面からの画になっています。


パッケージを開けたところ。iPhone 5と同様です。


中身も変わりません。もはや形式美です。


iPhone 5と並べたところ。唯一の違いはホームボタンで、周囲にリングが追加され、四角マークが消えたことなのですが、写真が光っていて、よく見えませんね...。


裏面。フラッシュが二灯になりました。


iOS7専用機だからでしょう、iPhoneのフォントが細身になっています。ただし、Pやeが顕著ですが、Helvetica Neue Lightというわけではありません。


あわせて純粋ケースも購入しました。色はおなじみ、(PRODUCT)REDです。


表面。触り心地は非常に快適で、革製iPad Smart Coverと非常に近い触感です。


よく見ると内側へはiPhoneロゴが書かれています。


一方、裏側には一切の文字がありません。


装着するとこんな感じになります。


保護シートは、いつもの通り MIYAVIX の OverLay Brilliant。iPhone 5用をそのまま利用。問題なく装着出来ました。


iPhone 5sの特徴としては、指紋認証のTouch IDや、800MHz帯のサポート、カメラの高機能化などが挙げられますが、プログラマとして一番楽しみなのは、64bit化されたA7 CPUです。

iPhone 5sの性能を活かすには、プログラミングモデルをILP32からLP64へ変更しなければなりません。一方で、その他の機種で動作させるために、従来通りILP32環境のサポートも必須です。

若き日に苦労したIP16からILP32への移行が、こんな小さなデバイス上でも訪れたことに、技術速度の素晴らしさを感じます。

Touch IDや64bit化は、将来のiPadなどでも実装されるのでは、と思います。便利な機能が様々なデバイスで使えるようになると良いですね。

2013/09/22

UISegmentedControlで選択されているSegmentのtapも検出できるライブラリを公開しました

iOSのUISegmentedControlは、複数要素から1つを選択する用途で便利に使えるコンポーネントです。

イベントの変化は -[UIControl addTarget:action:forControlEvents:] を用い、UIControlEventValueChangedを検出するのが一般的です。

但し、ラジオボタンのアナロジーである為でしょうか、現在選択されている Segment を再度選択しても、UIControlEventValueChangedは発火しません。

勿論UISegmentedControlのtouch系イベントは発火するので、それを用いることでtapを検出することが出来ます。

注意すべきは、iOS6以前とiOS7でUISegmentedControlのtap検出タイミングが変化したことです。

iOS6以前は所謂 Touch Down 時点をもって「Segment が選択された」とされていましたが、iOS7からは Touch Up Inside 時点をもっての選択へ変更されました。UIButton の挙動と整合した、という点では、わかりやすくなったと言えるでしょう。

このOSに伴う動作の差などを吸収し、既に選択されているSegmentの再tapを検出するためTPSegmentedControlをgithub で公開しました

UISegmentedControl に対する非常に小さな hack です。UISegmentedControl をそのまま置き換える形で利用できます。

最も単純にはLibディレクトリへ含まれてるTPSegmentedControl.hとTPSegmentedControl.mを自身のプロジェクトへ追加し、UISegmentedControlを使っていたコードを、TPSegmentedControlへ置き換えれば動作します。

CocoaPods へも対応していますのでPodsでインストールすることも可能です。
% edit Podfile
pod 'TPSegmentedControl'

ご意見、ご感想、pull request等お待ちしております。