1

Apple が iPhone OS のバージョン 3.0 を導入したとき、UIImagePickerController はわずかに変更されました。ユーザーが最近撮影した写真を確認した後、アクティビティまたは進行状況のインジケーターを提供しなくなりました。一言で言えば、あなたは今 - 写真を撮って - 大丈夫だと判断して - 「使用」ボタンを押して待ってください。実際に「使用する」ボタンを押したかどうかの表示はありません。実際に打ったかどうかわからないので、何度も打ってしまうことが多いです。数秒後、画像が表示されるか、デリゲート接続を介して画像が利用可能になります。

  • (void)imagePickerController:(UIImagePickerController *)ピッカー didFinishPickingMediaWithInfo:(NSDictionary *)info

私の質問はこれです: - 「使用」ボタンが選択された直後に UIActivityIndi​​catorView を表示するにはどうすればよいですか? または、「使用」ボタンのコールバックをインターセプトして独自のコードを挿入するにはどうすればよいですか? 私はウェブを検索しましたが、多くの人が同じ問題を抱えていると予想しましたが、まだ解決策を見つけていません.

ありがとう。

4

3 に答える 3

1

残念ながら、この通話を傍受することはできません。これは、UIImagePickerController に Use ボタンが押されたことをデリゲートに伝えるデリゲート メソッドがないためです。UIImagePickerController のコードを変更できないので、できることは何もないと思います。Apple は 3.1 でこれを改善するかもしれません。UIImagePickerController でいくつかの作業を行ったと聞きました...

于 2009-08-19T19:07:29.767 に答える
0

ディスパッチ キューの概念を通じて、

使用ボタンを押すと、1 つのスレッドで pickercontroller が閉じられ、別のスレッドで実行されるアクティビティ インジケーター コードが表示されます。その間に、独自のメソッドを呼び出すことができます。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

dispatch_async(dispatch_get_main_queue(), ^{

  indicator=[[MBProgressHUD alloc]init];
  indicator.labelText=@"Loading";
  indicator = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES];
  [indicator show:YES];


});

// Put here the code to resize the image
[self performSelectorInBackground:@selector(setPath:) withObject:image];

dispatch_async(dispatch_get_main_queue(), ^{
  [picker dismissModalViewControllerAnimated:YES];

});

また

uiimagepickercontroller でアクティビティ インジケーターを表示する場合は、この行を変更するだけです

  indicator=[[MBProgressHUD alloc]init];
  indicator.labelText=@"Loading";
  indicator = [MBProgressHUD showHUDAddedTo:picker.cameraOverlayView animated:YES];
  [indicator show:YES];
于 2013-03-16T04:58:14.570 に答える
0

基本的にできることは、UIActivityInidicatior を UIImagePicker ビューに追加してから閉じることです。

ユーザーが使用ボタンを押した後に画像を圧縮しているときに、私が行っている同様のことを次に示します。NSTimer に注目してください - 追加している UI を iPhone に実際に表示させるのは巧妙なトリックです: on didFinishPickingImage:

//this will add the UIActivityInidicatior to the picker view

(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo { 
 showActivity(@"Compressing Image", picker.view);

 //this is a hack so the progress label will show up

[NSTimer scheduledTimerWithTimeInterval: 0.0f
                                     target: self
                                   selector: @selector(compress:)
                                   userInfo: image
                                    repeats: NO];
}




//the Compress method

(void) compress:(NSTimer *)inTimer {
 NSAutoreleasePool *_pool = [[NSAutoreleasePool alloc] init];

 //do some work


   [[self getPicker] dismissModalViewControllerAnimated:YES]; 

//dismiss the view we added to the picker
 showActivity(nil, [self getPicker].view);

 [_pool release];

}

UIImagePickerController呼び出されたメッセージから参照できるように、外側を保持していることに注意してください。

showActivity特定のビューにいくつかの UI を追加する単純なメソッドです。

于 2009-10-04T12:32:58.310 に答える