Google Maps SDK for iOSがキタ——(゚∀゚)——!!

Google Maps API Teamから「使えるようになったぜ」ってメールが着たのでお試し。
前はAPI keyが生成できなかったんだが、はてさて。

Getting Started

ココから順序通りにやってみる。
まずはSDKをダウンロード。なにげにバージョンが1.1.0に上がってるw

API keyを作成

  1.  ココからAPI Projectを作成
  2. ServicesのペインからGoogle Maps SDK for iOSをONにする
  3. API AccessのペインからCreate new iOS key…をクリックする
  4. ダイアログのテキストエリアにSDKを使用するアプリのbundle identifiersを登録する
  5. CreateをクリックするとAPI keyが作成される
  6. API AccessのペインのKey for iOS apps (with bundle identifiers)の項目にあるAPI keyがアプリで使用するキーになる

4のbundle identifiersの登録は制限をかけるためのものなので、API keyを使い回す場合は複数登録するのかな。
何も登録しなかったら全てのアプリからAPI keyが使い回せるみたい。

サンプルプロジェクトで確認

ダウンロードしたSDKにサンプルプロジェクトが同梱されているのでAPI keyがちゃんと使えるかどうかだけならこのプロジェクトで試せばいいかな。
SDKDemos/APIKey.hに

const static NSString *APIKey = @"";

があるので、API keyをコピペ。
実行するとサンプルのリストが出てくるので適当に。
iOSシミュレータのスクリーンショット 2013.02.22 1.48.58

MapSampleViewController

iOSシミュレータのスクリーンショット 2013.02.22 1.49.12

ShowcaseSample

iOSシミュレータのスクリーンショット 2013.02.22 1.54.00

CameraSample

iOSシミュレータのスクリーンショット 2013.02.22 2.00.12

サンプルの一覧

  • MapSampleViewController
  • UISettingsSample
  • Map Types
  • ResizeMapSample
  • CustomMarkerSample
  • GroundOverlaySample
  • ProjectionSample
  • TrafficSample
  • ShowcaseSample
  • CameraSample
  • PolylineSample
  • MarkerSample

自前のプロジェクトを起こしてみる

API keyが問題なく作成できたので自前のプロジェクトで試してみる。

  1. Single View Applicationでプロジェクトを作成
  2. ダウンロードしたGoogleMaps.frameworkをフォルダごとプロジェクトにコピー
  3. コピーしたGoogleMaps.frameworkをShow in Finderで開いて、ResourcesフォルダにあるGoogleMaps.bundleをプロジェクトにコピー
  4. プロジェクトのTargetsのBuild PhasesのLink Binary With Librariesに以下のライブラリを追加
    • AVFoundation.framework
    • CoreData.framework
    • CoreLocation.framework
    • CoreText.framework
    • GLKit.framework
    • ImageIO.framework
    • libicucore.dylib
    • libstdc++.dylib
    • libz.dylib
    • OpenGLES.framework
    • QuartzCore.framework
    • SystemConfiguration.framework
  5. Build SettingsのArchitecturesをarmv7に変更
  6. Other Linker Flagsに-ObjCを追加
  7. AppDelegateあたりで初期化
    #import <GoogleMaps/GoogleMaps.h>
    

    application:didFinishLaunchingWithOptions:メソッドで

    [GMSServices provideAPIKey:@"YOUR_API_KEY"];
    

ViewControllerにマップの追加

#import "YourViewController.h"
#import <GoogleMaps/GoogleMaps.h>

@implementation YourViewController {
  GMSMapView *mapView_;
}

// You don't need to modify the default initWithNibName:bundle: method.

- (void)loadView {
  GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.8683
                                                          longitude:151.2086
                                                               zoom:6];
  mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera];
  mapView_.myLocationEnabled = YES;
  self.view = mapView_;

  GMSMarkerOptions *options = [[GMSMarkerOptions alloc] init];
  options.position = CLLocationCoordinate2DMake(-33.8683, 151.2086);
  options.title = @"Sydney";
  options.snippet = @"Australia";
  [mapView_ addMarkerWithOptions:options];
}

サンプルコードそのまんまだけど、適当に自分のViewControllerに突っ込んだらマップが表示された。
iOSシミュレータのスクリーンショット 2013.02.22 4.00.43

広告

iPhoneの片手用操作メニュー(QuadCurveMenu編)

iPhoneを片手で扱える操作用メニューを作りたいと思ったのでちょっと調べたことをメモ。

CSS で作るスマートフォン向け片手操作メニュー

これCSSとjQueryなのか、スゲー。
でも、Viewコンテナーとして作りたいんだよなー、と思ったらインスパイア元があるらしい。

ちなみに今回のやつ、デザインは Dribbble に投稿された下記がイケてたのでインスパイアされてみた。

iPhone Search Type Nav (Path Inspired) by Eric Hoffman : Dribbble


エントリーのタイトルにあるように「Path」にインスパイアされてるらしい。
「Path」ってなんぞ?
とググってみたら、ちょっと変わったSNSらしく、その「Path」のiPhoneアプリのUIにインスパイアされてるらしい。

Mobile UI Patterns – CustomNavigation

おぉ、まさにこういうメニューが作りたかったんだよ。

サンプルになりそうなソースが公開されてないか探してみた。
QuadCurveMenu for iOS : Cocoa Controls
levey / QuadCurveMenu : github
ライセンスもMIT Licenseなのでクレジット表記で改変自由。

ARC対応してないソースだったのでARC対応を再度探してみたらあった。
flubbermedia / QuadCurveMenu : github
levey氏のソースからforkしたものだ。

画面左上の配置しか無かったので、6パターンの配置になるようにソースを修正。


左上、左中、左下、右上、右中、右下の順に1~6までの数字ボタンを割り当て、タップすると配置が変更するようにしてみた。
実機で使い心地を試してみたが、親指で操作する場合は中段の配置が一番便利かな。
メニューの展開が180度開く必要があるかは微妙だけど。
邪魔にならない前提を考えると実用的なのはやっぱり下段。
あとはボタンの透明度を上げるとかすれば邪魔な感じが減るかもしれない。

ソースはfork元同様、githubで。
nalabjp / QuadCurveMenu : github

UITextFieldDelegate

UITextFieldDelegateの動作と戻り値について調べたのでメモ。

(BOOL)textFieldShouldBeginEditing:

  • FirstResponderになる際、一番目に呼ばれるコールバック。
  • YES→FirstResponderになる。
  • NO →FirstResponderにならない。

(void)textFieldDidBeginEditing:

  • FirstResponderになる際、二番目に呼ばれるコールバック。
  • textFieldShouldBeginEditing:でNOが返却された場合は呼ばれない。

(BOOL)textFieldShoultEndEditing:

  • FirstResponderでなくなる際、一番目に呼ばれるコールバック。
  • YES→FirstResponderでなくなる。
  • NO →FirstResponderのまま。

(void)textFieldDidEndEditing:

  • FirstResponderでなくなる際、二番目に呼ばれるコールバック。
  • textFieldShoultEndEditing:でNOが返却された場合は呼ばれない。

(BOOL)textField:shouldChangeCharactersInRange:replacementString:

  • UITextFieldに変更があった際に呼ばれるコールバック。
  • YES→変更が有効になりUITextFieldに反映される。
  • NO →変更は無効になりUITextFieldには反映されない。

(BOOL)textFieldShouldClear:

  • クリアボタンがタップされたときに呼ばれるコールバック。
  • YES→UITextFieldがクリアされる。
  • NO →UITextFieldはクリアされない。

(BOOL)textFieldShouldReturn:

  • リターンキーがタップされた時に呼ばれるコールバック。
  • YES→UITextFieldの「Did End On Exit」イベントが発生する。
  • NO →UITextFieldの「Did End On Exit」イベントは発生しない。

Apple Developer Program

新規にApple Developer Programを追加購入する必要があったので購入手続きを。
昔とは違いAppleIDが日本語登録でも問題なく購入できるようになってた。
AppleIDが日本語だと本国での登録時に日本語が「?」に文字化けしていたり、日本のApple Storeでの支払いは日本語で入力された情報が必要だったりと、日米でのサイトの行き来でエラーが発生してサポートに修正依頼を出したりというのが必要だったみたいだが、現在は特に気にしなくても良さそう。
今回の登録時はAppleIDは日本語で登録していて米国サイト側では文字化けしてたが、無視して手続きを進めたら問題なく購入できアクティベーションコードも普通にメールで送られてきた。
面倒な手続きが必要だったのが改善されていて良かった。
さて、プロビジョニングやり直さないとなー。

リハビリ

やっと時間が取れたので久しぶりにXcodeを起動。
4.2になってから初だな。
「Create a new Xcode project」を選択したら、テンプレートが全然変わってて戸惑う。
storyboard, ARCにプロジェクト管理はgitですか、そうですか。
UIが違うのは慣れるしかしかたないにしてもstoryboardあたりはちゃんと覚えた方がいいのかな?
IBはあまり使いたくない人だったけど。
色々リハビリが必要そうだな、ってことでしばしお勉強。

あ、__MyCompanyName__ の変更はアドレスブック.appで。

%d人のブロガーが「いいね」をつけました。