1

アクション シートから ios カメラを使用する際に厄介な問題があります。ユーザーが「写真ボタン」に触れると、アクション シートが表示され、2 つのオプション (フォト ライブラリの写真を使用するか、カメラで写真を撮る) が表示されます。 .

どのオプションを選択しても何も起こりませんが、メディアの種類をもう一度選択すると機能します。

以下は私のコードです:

 - (IBAction)selectMediaType: (id)sender {
    [appDelegate hideTabBar];
    UIActionSheet *action = [[UIActionSheet alloc] 
                             initWithTitle: nil
                             delegate:self 
                             cancelButtonTitle:@"Fechar" 
                             destructiveButtonTitle: nil 
                             otherButtonTitles:@"Galeria", @"Tirar Foto", nil];

    [action showFromTabBar: appDelegate.tabController.tabBar];
}


- (void) actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (buttonIndex == 0) {
        UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
        NSArray *mediaTypes = [NSArray arrayWithObjects:(NSString *)kUTTypeImage, nil];

        imagePicker.delegate = self;
        imagePicker.hidesBottomBarWhenPushed = YES;
        imagePicker.mediaTypes = mediaTypes;
        imagePicker.allowsEditing = NO;
        imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

        [self presentModalViewController:imagePicker animated:YES];
        imagePicker.hidesBottomBarWhenPushed = YES;
    } else if (buttonIndex == 1) {
        if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
            UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
            NSArray *mediaTypes = [NSArray arrayWithObjects:(NSString *)kUTTypeImage, nil];

            imagePicker.delegate = self;
            imagePicker.mediaTypes = mediaTypes;
            imagePicker.allowsEditing = YES;
            imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
            imagePicker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto;

            [self presentModalViewController:imagePicker animated:YES];
        } else {
            UIAlertView *alert = [[UIAlertView alloc] 
                                  initWithTitle:@"" 
                                  message:@"Your device does not support this feature!" 
                                  delegate:self 
                                  cancelButtonTitle:@"OK" 
                                  otherButtonTitles: nil];
            [alert show];
            [alert release];

        }
    } else {
        [appDelegate showTabBar];
    }
}



- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    UIImage *image;
    NSURL *mediaURL;

    mediaURL = (NSURL *) [info valueForKey:UIImagePickerControllerMediaURL];

    if (mediaURL == nil) {
        image = (UIImage *) [info valueForKey:UIImagePickerControllerOriginalImage];
    }

    imageView.image = image;

    [picker dismissModalViewControllerAnimated:YES];

    [appDelegate showTabBar];
}

- (void) imagePickerControllerDidCancel:(UIImagePickerController *)picker {

    [picker dismissModalViewControllerAnimated:YES];

    [appDelegate showTabBar];
}

誰でもこれで私を助けることができますか?

ありがとう。

4

1 に答える 1

1

わかった。

基本的にはメモリ リークの問題でした: スーパー ビュー (現在のビューではなく) にサブビューを追加するビューを切り替えていましたが、スーパー ビューから古いビューを削除していなかったので、メモリ リークが発生しました;)

于 2012-04-19T21:29:53.327 に答える