Objective-C

UITableViewでラウンドロビン的な無限スクロールCoverFlowを作る

「UITableViewでCoverFlowを作れるか?」というネタに興味が湧いたのでちょっとやってみました。 UITableViewハックちなみに、iOSのCoverFlowについて調べてみると下記のようなframeworkが見つかりました。 FlowCover (http://www.chaosinmotion.com/flowcov…

サーバから自由にカスタマイズ可能なメニューを実装する

メニューの項目や階層構造をアプリのリリース後に自由に変更できるようにしたいことがあります。 基幹系アプリの場合によくある理由として 常時通信環境で運用するわけではない 運用してみないとよりよいメニュー構造がわからない iOS技術者ではない運用者が…

iOS6のSocial.frameworkを試してみた

iOS6からFacebook、微博(Weibo)、Twitterを統合したSocial.frameworkが追加されました。例によってAOuth認証などの面倒な手続きは全てiOS側で行なってくれるので投稿だけであれば、数行のコードで実装が可能です。 iOS5から追加されたTwitter.frameworkは廃…

スクロール追跡バナーを作ってみた

スマホに最適化されたWebサイトでよく見かけるスクロールについてくるあのバナーを、あえてネイティブで実装してみました。あくまで技術的なネタであってわざわざこういった実装をする目的はアレなので実際にAppStoreの審査でどうなるかは不明です。方法とし…

スクロール追跡バナーを作ってみた

スマホに最適化されたWebサイトでよく見かけるスクロールについてくるあのバナーを、あえてネイティブで実装してみました。あくまで技術的なネタであってわざわざこういった実装をする目的はアレなので実際にAppStoreの審査でどうなるかは不明です。方法とし…

スクロール追跡バナーを作ってみた

スマホに最適化されたWebサイトでよく見かけるスクロールについてくるあのバナーを、あえてネイティブで実装してみました。あくまで技術的なネタであってわざわざこういった実装をする目的はアレなので実際にAppStoreの審査でどうなるかは不明です。方法とし…

Storyboardについて発表してきました

SWWDC 仙台iOS開発者向け勉強会で Storyboard について発表してきました。 今までInterfaceBuilderすら毛嫌いして使ってこなかったのですが、他の開発者の方から便利になったと聞いて色々と試してみました。現段階ではデメリットはあるものの、メリットの部…

Blocksの活用法について

iphone_dev_thk 仙台iOS開発者勉強会! 2012/3/3 にて「Blocksの活用法」について発表してきました。内容はBlocksの基本的な部分の説明と下記の3つのソース解説です。 iOSコーディングスタイルを変えてしまうBlocksKitの紹介 Blockを利用し使いやすくUITabl…

ATND暦のソースコードを公開しました

ATND暦のアップデート版がApple審査が無事通過し公開されました。だいぶバグも落ち着き安定したので晴れてver1.0としました。今回のアップデートはWeb版のATNDカレンダーと同じく7日数以上続くイベントを表示しないようにしました。日数はオプションで変更…

Blockを利用し使いやすくUITableViewをカテゴリで拡張する

UITableViewについて実装の経験がある方は使いづらいと感じたことがあると思います。UITableViewDelegate、UITableViewDataSourceのデリゲートパターンのサイクルは覚えてしまえばすむ話ですが、実装後のメンテに苦労する人も多いのではないでしょうか? 下…

iOSコーディングスタイルを変えてしまうBlocksKitの紹介

iOS4からBlockが導入されました。利用目的としてはDelegateパターンと大差ないと思っていますが、処理記述が呼び出し元で記述できることで可読性が高くなります。 また、コールバック時に利用されるperformedSelectorが非常に使いづらく複数の引数となった場…

TapkuLibraryを使ってiPhoneカレンダーアプリを作ってみる

仙台iOS開発者勉強会にてTapkuLibraryの紹介を行いました。 Presentation of TapkuLibrary View more presentations from Hidetoshi Mori このライブラリは色々な便利なカバーフローやグラフ、プログレスアラート等のViewの部品の集合なのですが、目玉として…

iOS3用にUIAlertView,UIActionSheetを使いやすく拡張する

iOSのUIKitにあるUIAlertView、UIActionSheetは非常に使い勝手が悪いと思います。 問題としてはControllerで複数使う場合にdelegateメソッドが被ってしまうことと、ボタン分岐がindex管理されている点にあると思います。 標準のクラスをそのまま使うとContro…

バーに配置する左三角矢印ボタンを作る

SafariではBackボタン、Forwardボタンとして左右向きの三角ボタンが配置されていますが、 UIBarButtonSystemItemの中ではUIBarButtonSystemItemPlayの右向きしか用意されていません。実際には、用途が異なるので画像を自前で用意してCustomButtonとして作成…

FacebookAPI (iOS SDK)を拡張する

iPhone Dev THK(東北・仙台)勉強会でセッションを行いました。Facebook APIをネイティブアプリとして動かすには幾つかのハードルがあり、実際にアプリに組み込んで使うにはiOS SDKを拡張しないと現実的でないので、その拡張をライブコーディングで行いました…

iPhoneのマイクで一定以上の大きさの音を検知する

Hack for Japan 7/30 ハッカソン仙台会場で「堪忍袋」というアプリの根幹を実装しました。 アイディアとして、いびきなどの音に反応して爆発音を鳴らすという単純な仕掛けですが、 肝はマイクで一定以上の音の大きさを検知することが必須となります。今回は…

コレクションオブジェクトのnilについて

コレクションオブジェクト NSArray、NSDictionary、NSSet ではnilを格納することができません。nilが終端オブジェクトとして扱われているためだと思いますがエラーにさえなりません。 id k1 = @"k1"; id k2 = @"k2"; id k3 = @"k3"; id o1 = @"o1"; id o2 = …

バージョンアップの判定

インストール直後やバージョンアップ直後の起動時にだけ行ないたい処理があります。例えば、データ移行処理や初期値設定処理などです。 アプリのバンドルバージョンの取得は下記のコードで取得できます。 [[NSBundle mainBundle] objectForInfoDictionaryKey…

ShadowOffsetのy座標について

「グラフィックスコンテキストに影を設定する CGContextSetShadow 関数の挙動が変わっている - 24/7 twenty-four seven」で紹介されていますが、iOS3.2以降からshadow関連のoffsetのy座標の正負が反転しました。 iOS3.1以前もターゲットに含めている場合は、…

iOSのバージョンの判定方法

SDKの挙動はバージョンによってガッツリに変わったりします。 その際にiOSバージョンを取得して判定する必要が出てきます。 UIDeviceからバージョン情報が取得できます。 NSArray *aOsVersions = [[[UIDevice currentDevice]systemVersion] componentsSepara…

実機の判定方法

実機の機種を判別したい時は次のコードでハードウェア名が取得できます。 struct utsname u; uname(&u); NSString *hardwareName = [NSString stringWithFormat:@"%s", u.machine]; ハードウェア名(hardwareName)と実機の組み合わせは下記の通りです。 ハー…