Hatena::Groupiphone-dev

iPhoneアプリ開発まっしぐら★ このページをアンテナに追加 RSSフィード

引っ越し後の日記はコチラです

tokoromのその他の日記

2011-11-27

MacアプリでもUIKitを使ってみる with Chameleon

| 10:42 | はてなブックマーク -  MacアプリでもUIKitを使ってみる with Chameleon - iPhoneアプリ開発まっしぐら★

Chameleon

Chameleon - UIKit for Mac development

このChameleonを使うとMacアプリの開発でもUIKitを使えるようになるとのこと。

前々から気になっていたので少し試してみた。

Chameleon自体はBigZaphod/Chameleon - GitHubからダウンロード可能。

また、Chameleonを試用した本記事のソースコード一式はtokorom/ChameleonUIKitDemo - GitHubからダウンロード可能。

今回は、UIViewControllerで画面を1つ作り、そこにUIImageViewやUIButtonを貼りつけて動かしてみるところまで実験。


まずはプロジェクトにChameleonを取り込む

※上記サイトからあらかじめChameleonをダウンロードしておくこと

まずはXcodeで空のMacアプリのプロジェクトを作成する。

そのプロジェクトにChameleonの中のUIKit.xcodeprojだけ追加する。

次に、Build PhasesのLink Binary With LibrariesUIKit.frameworkを追加する。

↓このあたりの実施後の画面が↓になります↓

f:id:tokorom:20111128103910p:image


UIKitを他のコードから使えるようにimport

■ChameleonUIKitDemo-Prefix.pch

プロジェクトの中にはじめからあるプリコンパイル済みヘッダで、上記のように

UIKit/UIKit.h

UIKit/UIKitView.h

をimportしておく。

もちろん、各ソースコードから個別にimportしても構わない。


UIKit用のAppDelegateを作っておく

■ChameleonAppDelegate.h

■ChameleonAppDelegate.m


ここは普段のiOS用アプリ開発とほぼ同じでOK!

唯一違うのは、windowやViewControllerのautoresizingMaskを明示的に指定するコードを追加するくらい。

UIViewControllerがそのまま使えるというのは素晴らしい!


はじめに表示するRootViewControllerを作っておく

ここはiOS用アプリ開発と全く同じ!

ここではUIImageViewとUIButtonを追加している。

※必要な画像はあらかじめプロジェクトに追加しておくこと

■RootViewController.h

■RootViewController.m


Mac用のAppDelegateをUIKit用AppDelegateに接続

■AppDelegate.h

■AppDelegate.m


ここでは、UIKitViewと先ほど作成したChameleonAppDelegate(UIKit用のAppDelegate)を追加する。

UIKitViewは後ほどInterface Builderで接続するためIBOutletを付けておく。

そして、applicationDidFinishLaunchingの中で、UIKit用AppDelegateに移管するため、UIKitViewのインスタンスに対してlaunchApplicationWithDelegateをコールして引数にUIKit用AppDelegateのインスタンスを指定する。


Interface Builder で最後の仕上げ

f:id:tokorom:20111128104037p:image

最後に、Interface BuilderでMainMenu.xibを開き、WindowsのメインViewにUIKitViewを追加する。

UIKitViewというオブジェクトはツール上は存在しないので、代わりにCustom Viewというのを貼り付ける。

そして、そのClass名をUIKitViewに変更する。

※このあたりは↑のスクリーンキャプチャのとおりです


これができたら、そのUIKitViewをApp Delegateに作っておいたOutlet(chameleonView)に接続する。

以上で完了。


ビルド&ラン!

f:id:tokorom:20111128103636p:image

実行してみたところUIImageViewUIButtonもきっちり動き、ボタン押下のアクションも問題なくハンドリングされていました。

なかなか面白いですね!

UIKit.frameworkをappの中に含める設定

なお、このままだとappとして出力した後にUIKit.frameworkが見つからなくて動作しなくなってしまう。

そのため、Builde PhasesCopy Filesという項を追加し、そこにUIKit.frameworkを設定しておく必要がある。

f:id:tokorom:20111130030943p:image