0

以下に投稿したコードには2つの機能があります。1つ目は写真を撮る(正常に機能している)ためのもので、2つ目はライブラリから画像を選択するためのもの(機能していない)です。関数が正しく呼び出されていません。私のコードをチェックして、何が悪いのか教えてください。

前もって感謝します。

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
    static NSDateFormatter *dateFormatter = nil;
    NSString *stringDate = nil;
    if (dateFormatter == nil) {
        dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"EE, d LLLL yyyy"];
        stringDate = [dateFormatter stringFromDate:[NSDate date]];
    }
    if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {
        UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
        // storing to camera roll
        UIImageWriteToSavedPhotosAlbum(image,self,@selector(image:finishedSavingWithError:contextInfo:),nil);
        CGSize newSize=CGSizeMake(320, 436);
        UIGraphicsBeginImageContext(newSize);
        [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
        UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

        xapp.profileImage=newImage;
        [[NSNotificationCenter defaultCenter]postNotificationName:@"addImage" object:nil];
    }

    // Commit the change.
    [self dismissModalViewControllerAnimated:YES];
}

-(void)image:(UIImage *)image finishedSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {
    if (error) {
        UIAlertView *alert = [[UIAlertView alloc]
                          initWithTitle: @"Save failed"
                          message: @"Failed to save image"
                          delegate: nil
                          cancelButtonTitle:@"OK"
                          otherButtonTitles:nil];
        [alert show];
    }
}
4

2 に答える 2

1

こんにちは、写真ライブラリのカメラから画像を完全にキャプチャするコードを入れただけです。チェックして、プロジェクトに実装してみてください:-

-(IBAction)actionImage:(id)sender
{   
    UIActionSheet *option =[[UIActionSheet alloc]initWithTitle:@"Select" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Select Photo",@"Take Photo",nil];
    option.actionSheetStyle =UIActionSheetStyleDefault;
    [option showInView:self.view];
}

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (actionSheet.tag==2) 
    {
        [self.navigationController popViewControllerAnimated:YES];
    }
    else
    {

        UIImagePickerController * picker = [[UIImagePickerController alloc] init];
        picker.delegate = self;

        if(buttonIndex ==0)
        {
            if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary])
            {       
                picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
                [self presentModalViewController:picker animated:YES];      
            }
        }
        else if(buttonIndex ==1)
        {
            if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
            {       
                picker.sourceType = UIImagePickerControllerSourceTypeCamera;
                [self presentModalViewController:picker animated:YES];      
            }
        }   
    }
}
#pragma mark - imagePickerController Delegate
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    [self dismissModalViewControllerAnimated:YES];
    imgUserImage.image = [info valueForKey:@"UIImagePickerControllerOriginalImage"];    

    return;
}

注:- 関連するフレームワークまたはデリゲートを含めることを忘れないでください。上記の方法を使用するだけで、このようなものに追加のコーディングが必要ないことを願っています:)

于 2013-03-18T12:46:54.590 に答える
0

コードには多くの変更が必要です。ライブラリから画像を選択するためのコードは次のとおりです。エラーを修正するのではなく、コードを提供する方がよいと思います。コードをお楽しみください。

-(void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
   NSString *mediaType = info[UIImagePickerControllerMediaType];

   [self dismissViewControllerAnimated:YES completion:nil];

    if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {
        UIImage *image = info[UIImagePickerControllerOriginalImage];

        _imageView.image = image;
        if (_newMedia)
            UIImageWriteToSavedPhotosAlbum(image,
               self,
               @selector(image:finishedSavingWithError:contextInfo:),
               nil);
        }
        else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie])
        {
                // Code here to support video if enabled
        }
}

-(void)image:(UIImage *)image
finishedSavingWithError:(NSError *)error
contextInfo:(void *)contextInfo
{
   if (error) {
        UIAlertView *alert = [[UIAlertView alloc]
           initWithTitle: @"Save failed"
           message: @"Failed to save image"
           delegate: nil
           cancelButtonTitle:@"OK"
           otherButtonTitles:nil];
        [alert show];
   }
}
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
   [self dismissViewControllerAnimated:YES completion:nil];
}
于 2013-03-18T12:38:37.520 に答える