アプリ二本目がモロにこの審査基準にハマったのですが、やっと何が引っかかったのか分かったので共有します。
まず、カメラボタンってのは、UIBarButtonItem などで initWithBarButtonSystemItem:UIBarButtonSystemItemCamera したときに表示される、以下のアイコンのボタン。
で、ここで迂闊に「お、これはカメラを表示するボタンだな」と思って、カメラモードのフォトピッカー (sourceType を UIImagePickerControllerSourceTypeCamera に設定した UIImagePickerController) を表示すると、iPhone Human Interface Guidelines に沿ってないと言われて Reject される。
おいおいどう見ても使い方間違ってないだろ、と思って抗議してたら、「正しい使い方は FaceBook アプリを参考にして下さい」と言われたので見てみると、どうやら、このカメラボタンは、以下のスクリーンショットのように、「『フォトアルバムから選択する』と『カメラで撮る』の項目があるアクションシートを開く」ためのものらしい。
正直、カメラボタン押したらカメラだろ、と思うし、現にそうなってるアプリも何故か沢山出回っているんだけれども、ガイドラインに沿ってないと言われたらこちらとしては何も言えないので、仕方なく自分でアイコン作ることにします。でもどう考えてもこのアイコンに酷似したものになっちゃいそうなんだけど。。。
IdairaIf you're reaidng this, you're all set, pardner!
pgrvcbWR7t39 <a href="http://qjcycdvsduvx.com/">qjcycdvsduvx</a>
gcvkzrxb1tWk9 , [url=http://tptsppzbgwfm.com/]tptsppzbgwfm[/url], [link=http://tjehssfsxhsv.com/]tjehssfsxhsv[/link], http://ombvvprrplow.com/
kidvptlo2X3ku <a href="http://kkyqmhqegdzw.com/">kkyqmhqegdzw</a>
uflcthPIxIkS , [url=http://adeatsplqexu.com/]adeatsplqexu[/url], [link=http://vcefimotlqnw.com/]vcefimotlqnw[/link], http://hcivgmmhqmyt.com/
XML の実体参照, 文字参照を自前でアンエスケープする必要があって、CoreFoundation には CFXMLCreateStringByUnescapingEntities というのがあるんだけれど残念ながら iPhone SDK には入っていない。
そこで誰か作ってないかなーと探していると、Google 先生が作っているじゃありませんか。
これの、Foundation/GTMNSString+HTML.h で、NSString に追加されている gtm_stringByUnescapingFromHTML を使うと、一発でできた。
しかも、この Google Toolbox for Mac 、俺が超苦労して実装した進捗通知付きの NSInputStream が入っていたり、Cocoa でつまづく系のユーティリティが一通り揃ってそうでかなりよさげな予感。コードを見る限り、ちゃんと iPhone SDK にも対応してるぽい。ライセンスも Apache License なので、次から、困ったらとりあえずここを探してみることにしよう。
- (void)log:(NSString*)value { NSLog("%@", value); }
この log メソッドを NSInvocation で呼ぶ場合。こんな感じで NSMethodSignature を引っ張って来て、target と selector と引数をセット。
NSString* param = @"test"; NSMethodSignature* sig = [self methodSignatureForSelector:@selector(log:)]; NSInvocation* inv = [NSInvocation invocationWithMethodSignature:sig]; [inv setTarget:self]; [inv setSelector:@selector(log:)]; [inv setArgument:¶m atIndex:2];
引数をセットするとき、1. & をつけて、ポインタのポインタを渡すこと, 2. 0番目と1番目は予約済み (暗黙に使われる) ので、2番目からセットすることに気をつける。
できたら、その場で呼び出したり、NSTimer で遅延呼び出しが出来る。
[inv invokeWithTarget:self]; // その場で呼び出し [NSTimer scheduledTimerWithTimeInterval:1.0 invocation:inv repeats:NO]; // 1 秒後に呼び出し
たぶんこの方法が一番スマート。
// image を newSize にリサイズする UIImage* image = ... CGSize newSize = ... UIGraphicsBeginImageContext(newSize); [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)]; UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); // newImage がリサイズ後のイメージ
Camera って名前のアイコンなのにカメラ起動したらダメとは。