2012年2月アーカイブ


ABC(Android Bazaar and Conference) 2012 Spring が開催されます。
詳しくはABC 2012 Spring のページ で

abc2012spring.jpg


こんな感じのコードでスクロールします。

// 目的のviewを何とかして取得。子Viewでないといけません。(孫ViewではNG)
TextView textView = (TextView)scrollView.findViewWithTag("some text") ;

// 目的のviewまでの距離を取得
Rect corners = new Rect(0,0,0,0) ;
Point offset = new Point(0,0) ;
scrollView.getChildVisibleRect((View) textView, corners, offset) ;

// いざスクロール
scrollView.scrollBy(0, corners.top);



android アプリの開発中、ImageView が大きくなりすぎないように
           android:maxWidth="96dp"
           android:maxHeight="96dp"
を指定したのだが、大きな画像をセットすると 96dp 以上でそのまま大きな画像が表示されてしまう。
maxWidth、maxHeight が効いていない状態。

調べたところ、以下の属性を追加すると効くようになるとのこと。
           android:adjustViewBounds="true"

追加したら無事に 96dp で表示してくれました。



In App Purchase の実装をして、iTunes Connect で アプリと Product の登録をしてテストしようとしたら failedTransaction になりました。
エラーコードは 3 で、メッセージは "Cannot connect to iTunes Store" でした。

はまりました。。。
ネットで調べるといろいろと対策が出ているので手当たり次第試したが、どれも効果なし。

で、結局たどりついた原因は事務的なことでした。

Paid app の contract が承認された状態でないとこのエラーが返ってくるようです。
contract を承認してもらうための情報を iTunes connect 上で入力し、cntract が承認状態になったらエラーが消えました。



iOS アプリを作っていて、画面のどこががタップされたことを UIViewController の touchesBegan
で検知しようとしたが、イベントが一向に上がってこない。

いろいろ試してみると、どうやら UITableView 上のタップでは UIVIewController まで上がってこないようだ。

以下の手順で解決

- UITableView のサブクラス TouchableTableView を作成
@interface TouchableTableView : UITableView
な感じ

- touchesBegan メソッドをオーバーライドし、nextResponder にイベントを渡す
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
   [self.nextResponder touchesBegan:touches withEvent:event];
   [super touchesBegan:touches withEvent:event];
}
な感じ

IB で TableView のクラスを TouchableTableView に変更

以上で無事にイベントが上がるようになりました。


アプリが動くようになってきたので、ipa ファイルを作り他の人に渡して動作確認をしてもらおうと思ったら、XCode の [Product] - [Build For] - [Build For Archiving]がグレーになっていて選択できない。。。

当然 [Product] - [Archive] もグレーで選択できず、ipa ファイルが作れない。

いろいろ悩んだ結果以下の方法で選択できるようになりました。

 - Scheme (アプリを実行する対象) を 「iOS Device」 にする。

これだけです、あんなに悩んだのに、これだけで解決です。

なぜか対象を Simulator にしていると Archive のメニューが選択できなくなります。
なぜそんな仕様に?
まぁ iOS 初心者の私なんぞにはわからない深い理由があるんだろうな。。。


iOS上でMP3を再生しようと思い、検索したらいくつか以下のようなサンプルが出てきたので、ボタンを押したら実行されるようにして実験してみた。

NSString *path = [[NSBundle mainBundle] pathForResource:@"hoge" ofType:@"mp3"];
NSURL *url = [NSURL fileURLWithPath:path];
AVAudioPlayer *audio = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
[audio play];

が、音が鳴らない。
こんなシンプルな4行で何かが間違っているはずもない、と思いながら考えてみたがわからない。

しばらくして、ふと思った。
play した後にaudioのインスタンスがすぐに消えるからじゃない?

ということで
AVAudioPlayer *audio
をクラスのメンバ変数として宣言したら音が鳴るようになりました


このアーカイブについて

このページには、2012年2月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2012年1月です。

次のアーカイブは2012年3月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 5.13-ja