2009年9月30日水曜日

iPhone MKMap Annotation remove 方法

何かボタンを押したときに、annotation で表示されたピンを初期化する際、

一度今ついているピンを全部削除したい。

でも userLocation は消したくない場合どうすればいいんだろう。

一気にすべての annotation を削除するには、

こういう感じ、annotatuion を全部、配列で取得して、それを一気に削除。

でもこれでは、userLocationまでも消えてしまう。。





で、なんとかうまくいった。

ループの中で、userLocation意外だったら削除するっという風にしてみたけど、

なんかわかんないけど、落ちてしまう。

だから仕方なく、配列からuserLocation だけ削除して、

最後にそれ以外を全部削除するようにした。

いいのか悪いのかわからないけど、とりあえずできたからいいや。


2009年9月25日金曜日

iPhone Developer Program Activation からの続き

iPhone Develper Program Activition の続き。。

Apple からディアクティベートできねーよ、ってメールが来たので問い合わたところ、数時間後、こんなメールが来ました。


「購入したときの受付番号」 と 「おめーの住所」を記入して返信しろと。

しかも、やっぱり日本語で、日本人の方がご丁寧にメールをくれました。なのでやっぱり問い合わせは日本語で通用するんだな。

で、調べて返信すると、自動配信メールが届き、その後、ディアクティベートもう一回してみて!っと言うメールが来るので、最初にもらったメールからディアクティベートすると!

できた!

しかし、この後、デバイスを登録したりなどいろいろあるみたい。ここからが正直めんどい。

1、証明書の作成、取得と登録
2、デバイス登録
3、Apps IDの登録
4、Provisioning Profileの登録
5、Xcodeにいろいろ登録
6、アプリへの適応とビルド



1、証明書の作成、取得と登録
登録する証明書の作成をする。

アプリケーション → ユーティリティ → 証明書アシスタント → 証明局証明を要求

- ユーザーメールアドレス IDCで登録したメールアドレス
- コモンネーム IDCトップで、表示される名前
- CAメールアドレス ここは空
- ディスクに保存にチェック
で作成して、適当な場所へ保存。

次に IDPページへ行き、左のメニューから「Certificates」ページへ行き、空の欄の右側に「Request Certificate」選択。

すると、英語の文章がなんやかんや並んだ一番下の左の方にファイルをアップするフォームがあるので、さっき作った証明書をアップして、submitする。そうすると一覧ページになんか出てくる。数秒後リロードするとダウンロードボタンが出てくるので、さくっとダウンロードし、さらに下に、「WWDR intermediate certificate」が出てくるのでこれもダウンロード。

ダウンロードした二つのファイルをそれぞれ実行すると、キーチェーンアプリが立ち上がるので、「ログイン」に追加する。


2、 証明書の取得と登録
IDPページから、DevicesページのManageタブの右上から、「Add Devices」をクリック。

- Device Name これはなんでも適当に、「MyiPhone」とか
- Device ID これが厄介だった。

Device IDは、通常、Xcodeを立ち上げて、ウインドウ → オーガナイザで、IdentifierよりIDを確認できる。しかーし、僕の場合、Xcode が iPhone を認識してくれませんでした。iTuneなどは認識するのに。

これは、OSと、Xcodeのバージョン、iPhone SDK のバージョンがかみ合ってないためになってしまった模様。

僕の場合、
OS X 10.6.1 スノレパ
Xcode 3.1.2

これがいかん。スノレパにあげるとXcodeとSDKもアップグレードしないとだめ。
ここの下の方のSDKから自分にあうバージョンをからダウンロードしてインストール

これで、認識できるようになったので、XcodeのオーガナイザでIDを確認して、デバイスを追加して登録する。


3、Apps IDの登録
IDPページから、App IDsページのManageタブの右上から、「Add Devices」をクリック。 右上の「New App ID」をクリック。

ここはよくわからん。適当に入れてみた。
- Name  iphone
- Bundle Identifire  *
で登録。Bundle Identfire をなんか登録したらビルドするときにエラーが出たので、なんでも許可できそうな * で。


4、Provisioning Profileの登録
 IDPページから、ProvisioningページManageタブで、右上にあるAdd profileを押す。

- Profile Name  適当。わかりやすけりゃOK
- 後の入力部分は、今まで作ったものが表示されるので、それらを順番に選択。

数分後、profileができるので、Detailをクリックし、そこからダウンロードボタンからゲット。


5、Xcodeにいろいろ登録
手順4でダウンロードした、profileを実行すると、xcodeが起動。オーガナイザが開らいた。しかし、エラーが出た!
なんかがこれまでの手順の何かがおかしいのか?実は、最初証明書をシステムに追加してたけど、ログインに追加してみたら、ばっちりうまくいった!

うまくいったら、Xcode メニュー → プロジェクト → プロジェクト設定を編集で
一般タブの プロジェクトフォーマットとすべての構成ベースSDKを自分の使っているものに変更。

ビルドタブで、コード署名ID → Any iPhone OS Device をさっきprofileを作成したときに指定した名前をプルダウンより選択。


6、アプリへの適応とビルド
Xcode を立ち上げて、プロジェクトを立ち上げます。ウインドウ左上のデバイスを設定した自分のiPhone に設定したら、ビルド!これでばっちりでしょ!

出来たー

iphone tableView グループCellの背景変更

TableView の Cell の背景を変更するとき、 普通に


cell.contentView.backgroundColor = [UIColor color] 」

とやっても、うまくいかない。角まで塗られてしまったり、Cellの周りの淵だけ塗られたりなど、散々。


そこで、これ!


João Prado Maia  さんのところにありました。

ライブラリはこれ

CustomCellBackgroundView *bgView = [[CustomCellBackgroundView alloc] initWithFrame:CGRectZero];
    if (indexPath.row == 0) {
        bgView.position = CustomCellBackgroundViewPositionTop;
    } else if (indexPath.row == count) {
        bgView.position = CustomCellBackgroundViewPositionBottom;
    } else {
        bgView.position = CustomCellBackgroundViewPositionMiddle;
    }


ライブラリの「CustomCellBackgroundView」のインスタンスを生成し、あとは、cellのポジションを指定。


Cellの一番上は、上が丸まるし、一番下は、下が丸まる。それ以外の所は丸まらないので、ポジションを指定する必要がある。



シングルの場合は、ライブラリにシングル用の処理を追加する。

(すでにインターフェースには変数の宣言はしてあるので、メソッドへの追加のみ

     } else if (position == CustomCellBackgroundViewPositionSingle) {
        CGFloat minx = CGRectGetMinX(rect) , midx = CGRectGetMidX(rect), maxx = CGRectGetMaxX(rect) ;
        CGFloat miny = CGRectGetMinY(rect) , midy = CGRectGetMidY(rect) , maxy = CGRectGetMaxY(rect) ;
        minx = minx + 1;
        miny = miny + 1;
          
        maxx = maxx - 1;
        maxy = maxy - 1;
      
        CGContextMoveToPoint(c, minx, midy);
        CGContextAddArcToPoint(c, minx, miny, midx, miny, 10.0f);
        CGContextAddArcToPoint(c, maxx, miny, maxx, midy, 10.0f);
        CGContextAddArcToPoint(c, maxx, maxy, midx, maxy, 10.0f);
        CGContextAddArcToPoint(c, minx, maxy, minx, midy, 10.0f);
          
        // Close the path
        CGContextClosePath(c);
        // Fill & stroke the path
        CGContextDrawPath(c, kCGPathFillStroke);              
        return;


で、肝心な色とボーダーの指定は、

    bgView.fillColor = [UIColor blackColor];
    bgView.borderColor = [UIColor whiteColor];

最後に
    cell.backgroundView = bgView;

iPhone Developer Program Activation

先日、 iPhone Developer Program 申し込んだ。今日そのActivationメールが届いた。

しかし、リンクからアクティベートしようとすると



We are unable to activate your iPhone membership because we are unable to successfully verify your identity. Please contact us and reference Enrollment ID# XXXXXXXXXX for further assistance.」っと。




仕方ないので、フォームから問い合わせてみた。

国を選ぶ欄があったので、きっと日本語も通じるんじゃないかと思い、がっつり日本語で問い合わせてやった。

返信が来るまでしばらく待つことにしよう。



その間、iPhoneアプリを仕上げちゃおう。