Recently in Location Clip Category

Location Clip 1.3 が Ready for Sale になりました。
まもなく AppStore に反映されると思いますので、アップデートどうぞよろしくお願いします。
先ほど、Location Clip 1.3 を審査に出しました。
今回のバージョンの新機能は、以下の通りです。どうぞお楽しみに。

1. TwitterのGeo Tagging APIの対応

Twitterに投稿するメッセージにGeoタグを付けることができるようになりました。

設定画面において、Twitterへの投稿時にGeoタグを付けるかどうかを選択できます。


2. 写真のサイズの設定

以前のバージョンでは、地図上に貼付ける写真のサイズは、長辺を200px固定としていましたが、本バージョンから、地図上に貼付ける写真のサイズが設定できるようになりました。

設定画面において、写真の長辺のサイズを180px、200px、240pxの中から選択できます。

なお、設定画面にてサイズの変更をした場合には、次に写真を貼付ける時から設定が有効になります。

もし、地図上に貼付けられている写真がある状態で設定を変更した場合、その写真のサイズは変更されませんのでご了承ください。


3. カメラで撮影した写真を保存するかどうかの設定

以前のバージョンでは、カメラで撮影した写真を必ずカメラロールに保存するようにしていましたが、本バージョンから、カメラロールに自動保存するかどうかを設定画面において設定できるようになりました。


4. URLスキーマの公開

他のアプリケーションから、Location Clipに連携できるように、URLスキーマを公開します。


URL :

com.fourmeisters.locationclip://open


パラメータ:

- 場所を指定したい場合

lat: 緯度座標

lon: 経度座標

※このパラメータが指定されない場合には、現在地を表示します。


- 地図のタイプを設定したい場合

type: 地図のタイプ。m(マップ)、s(航空写真)、h(地図+写真)。

※このパラメータが指定されない場合には、マップ表示します。


- 地図上に写真を貼付けたい場合(1枚のみ)

photo: 写真の貼付け有無。y(貼付ける)、n(貼付けない)。

貼付けたい写真の画像(UIImage)がペーストボードに入っていることが前提です。


pbname: ペーストボードの名前。

名前付きペーストボードに写真をセットしている場合には、そのペーストボード名を指定します。

このパラメータが指定されない場合には、標準ペーストボードを参照します。


- LocationClipの処理終了後、呼び出し元アプリに戻りたい場合

returnURL: yourapp://xxxxx

もし、URLの中にパラメータがある場合には、&や=などの文字は、正しくエンコードしてください。

例えば、yourapp://xxxxx?foo=aaa&baa=bbb に戻りたい場合には、yourapp://xxxxx?foo%3Daaa%26baa%3Dbbb となります。


例:

com.fourmeisters.locationclip://open?lat=37.00000&lon=139.00000&type=h

com.fourmeisters.locationclip://open?photo=y&pbname=com.foo.baa.pbname

com.fourmeisters.locationclip://open?returnURL=yourapp://xxxxx


5. Copy & Send (Lite) との連携

弊社からリリースしているCopy & Send(Lite)をインストールしている場合には、Location Clipでクリップした情報を、Copy & Send (Lite) に渡して他のiPhone/iPod touchに送信することができます。


Location Clip 1.2 では、カメラで撮った写真をカメラロールに保存する機能がありますが、今日は、この機能の実装について取り上げたいと思います。

皆さんご存知の通り、写真をカメラロールに保存する際に利用するAPIは・・・

ですが、以下のような実装だけで終わらせている(保存完了のコールバックを設定していない)サンプルを実によく見かけます。

このような実装は、一見簡単でいいように見えますが、もし、このように実装してしまった場合、写真を保存し終わったことをアプリケーションが知る術がなくなってしまい、ちゃんと保存できたのかどうかを、アプリケーションで判断できなくなってしまいます。
処理が正常に終わったかどうかを確認するために、ちゃんとcompletionTargetとcompletionSelectorを設定するようにしましょう。

そしてまた、保存処理中にアプリケーションを終了してしまったりすると、カメラロールに写真が保存できなかったり、サムネイルが保存されなかったりすることがあるため、 UIActivityIndicatorView などを使って保存処理中であることをユーザに対して示すような配慮をしてあげると良いと思います。

表題の通り、先日、審査に提出した Location Clip 1.2 を、一旦、セルフリジェクトし、再提出しました。

理由は、先日提出したアプリでは、カメラアイコンを使ったボタンをメイン画面に配置していたのですが、これでは、カメラのついていない iPod touch を利用しているユーザ様に誤解を与えるかもしれないため、これを修正したためです。

お待たせして申し訳ありませんが、審査の間、しばらくお待ち頂ければと思います。

影付き画像(UIImage)を作成する。

| 1 Comment | 0 TrackBacks
Location Clip 1.2(現在審査中)では、写真を地図上に貼付ける機能が追加されますが、今日は、この機能の中から、地図上に貼付ける画像に影を付ける部分の実装について取り上げたいと思います。
locationclip1_2.jpg

ポイントは以下の通りです。
- 作成する画像のサイズは、写真のサイズに影のサイズを加算したサイズにする。
- 影を付けるには、CGContextSetShadow(または、CGContextSetShadowWithColor)を使う。
- CGContextSetShadowで、グラフィックスコンテキストに対して、影を有効にした後、画像を描く。

以下に、実装例を示します。
以下の実装例では、写真部分を 320 x 240px、影部分を 12px で出力するものとしています。




表題の通り、Location Clip 1.2 を審査に出しました。

今回のリリースでは、以下の機能が追加されています。

- カメラ撮影した写真やフォトアルバムから選択した写真を地図上に貼付ける機能

- 緯度経度座標をクリップした地図画像の上部に付加する機能

- クリップした位置情報を履歴として保存する機能

- 履歴として保存した位置情報の検索機能、グルーピング機能、表示機能、復元機能


審査が終わるまでの間、しばらくお待ちくださいませ。

MKMapViewの地図のタイプを変更する。

| 1 Comment | 0 TrackBacks
MKMapViewでは、地図のタイプとして、以下の3種類を選択することができます。
  • マップ
  • 航空写真
  • 地図+写真

今日は、この地図タイプの切り替えについてのトピックです。

ポイントは、以下の通りです。
  • 地図のタイプを選択するセグメントコントロールを用意する。
  • UIControlEventValueChangedイベント(セグメントコントロールの値が変わったタイミングで発行されるイベント)を処理するためのメソッドを定義する。
  • セグメントコントロールの値が変わったタイミングで、地図のタイプを変更する。
  • 地図のタイプの設定は、MKMapViewのmapTypeプロパティの値を設定することで行う。

以下に、実装例を示します。

-- MyViewController.h --

-- MyViewController.m --


簡単でいいですね。
MapKit、とても良く出来ています。

MKMapView上にアノテーションを追加すると、当然、ドラッグして動かしたくなりますよね。
今日は、その時に、アノテーションを "ぽよん" と浮かせる方法についての記事です。

ポイントは、以下の通りです。
- MKPinAnnotationViewのサブクラスで、タッチイベントを処理する。
- touchesBegan:withEvent: が呼ばれたら、MKPinAnnotationViewのimageをピンが浮いているように見える画像と入れ替える。

えっ、それだけ?という方もいらっしゃるかもしれませんが、はい、これだけです。

以下に、実装例を示します。

-- MyPinAnnotationView.h --

-- MyPinAnnotationView.m --


注)
なお、この方法は、Location Clipでは、そうしているというだけで、正しいやり方かどうかはわかりません。ご了承ください。

MapKitが提供するMKAnnotationやMKPinAnnotationViewを使って、MKMapView上にアノテーションを追加することができます。

ポイントは、以下の通りです。
  • MKAnnotationプロトコルを実装したインタフェースを定義する。
  • MKPinAnnotationViewを継承したインタフェースを実装する。
  • MKMapViewDelegate の mapView:viewForAnnotation: で、MKPinAnnotationViewを継承したインスタンスを生成して返却する。
  • MKAnnotationプロトコルを実装したインスタンスを生成して、MKMapView上に追加する。

以下に、実装例を示します。

-- MyAnnotation.h --

-- MyAnnotation.m --
 
-- MyPinAnnotationView.h --

-- MyPinAnnotationView.m --
 
-- MyViewController.h --

-- MyViewController.m --

GPSを使って取得した緯度経度に該当する住所の情報を取得したい場合には、MapKitが提供しているMKReverseGeocorderを使うと便利です。

MKReverseGeocorderを使う時のポイントは、以下の通りです。
  • MKReverseGeocoderのインスタンスを作成し、delegateを設定。delegateには、MKReverseGeocoderDelegateプロトコルを実装しているオブジェクトを設定する。
  • MKReverseGeocoderのstartを呼び出すことで、プレースマークの取得処理が始まる。(結果は非同期で返される)
  • プレースマークが取得できた場合には、MKReverseGeocoderDelegate の reverseGeocoder:didFindPlacemark: が呼び出される。
  • プレースマークが取得できなかった場合には、MKReverseGeocoderDelegate の reverseGeocoder:didFailWithError: が呼び出される。

以下に、実装例を示します。
以下は、GPSからの位置情報を取得した後に、MKReverseGeocoderを使ってプレースマークを取得する場合の実装例です。

-- MyViewController.h --

-- MyViewController.m --

iPhone Applications

Twitter