0

UIImagePickerViewControllerを使用して、アプリのiPhoneのデフォルトカメラから写真を撮り、ドキュメントディレクトリに保存しています。プロセスの完了に時間がかかり、テーブルビューでの表示が非常に遅くなります。画像のサイズ変更はここで役立ちますか?

-(IBAction)takePhoto:(id)sender
{
    if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera])
    {
        imgPicker.sourceType = UIImagePickerControllerSourceTypeCamera;
        [self presentModalViewController:imgPicker animated:YES];
    }
}



-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
       UIImage *pickedImage = [info objectForKey:UIImagePickerControllerOriginalImage];    
    [self dismissModalViewControllerAnimated:YES];

    NSData *imageData = UIImagePNGRepresentation(pickedImage);

    NSString *path = [SAVEDIMAGE_DIR stringByAppendingPathComponent:@"image.png"];

    [imageData writeToFile:path atomically:YES];
}  
4

1 に答える 1

0

もちろん!

私は自分のアプリで次のことを行います。

  • バックグラウンドスレッドの画像ストアに画像を保存する
  • サムネイルを作成し(これもバックグラウンドスレッドで)、このサムネイルをコアデータテーブルに保存します。タイプIDのフィールド

そのため、ユーザーが2秒ごとに約写真を撮ることができるスムーズなUIが得られます。

テーブルビューの滑らかさも問題ありません。TableViewCells ImageViewsもバックグラウンドスレッドから入力しますが(もちろん、バックグラウンドで画像を準備し、メインスレッドでUIImageViewに割り当てます)。

お役に立てば幸いです。さらに質問を歓迎します。

あなたの便宜のためのいくつかのコード:

Imagestoreとして私はこれらを使用します:https ://github.com/snowdon/Homepwner/blob/master/Homepwner/ImageStore.m

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    [self performSelectorInBackground:@selector(saveFoto:) withObject:info];
    // you should add some code for indicating the save process

}

// saves the photo in background-thread 
-(void)saveFoto:(NSDictionary*)info {
    // the following is some stuff that I do in my app - you will probably do some other things
    UIImage *image = [ImageHelper normalizeImageRotation: [info objectForKey:UIImagePickerControllerOriginalImage]];
    UIImage *thumb = [ImageHelper image:image fitInSize:CGSizeMake(imgWidth, imgWidth) trimmed:YES];
    NSString *myGUID = myGUIDCreator();
    [[ImageStore defaultImageStore] setImage:image forKey:myGUID];
    myCoreDataManagedObject.thumb = thumb;
    [self performSelectorOnMainThread:@selector(showYourResultsInTheUI:) withObject:thumb waitUntilDone:NO];  // every UI-Update has to be done in the mainthread!
}
于 2013-01-23T13:46:52.807 に答える