在iOS设备上拍照和录像

时间:2014-03-31 18:16:10

标签: ios objective-c cocoa-touch

我试图拍摄并拍摄照片并在uiimage视图中显示和/或拍摄视频并在电影播放器​​控制器中播放。

我可以点击一个按钮,并在我的uiimageview中显示“拍照”就好了。然而,如果我单击“拍摄视频”按钮,图像就会从uiimageview中消失。拍摄视频的工作方式和显示效果很好,但就像说我的uiimage现在已经消失了。

如果我重新拍摄照片,我拍摄的视频会消失吗?

.h文件

#import <UIKit/UIKit.h>
#import <MediaPlayer/MediaPlayer.h>
#import <MobileCoreServices/MobileCoreServices.h>

@interface addEventViewController : UIViewController<UIImagePickerControllerDelegate, UINavigationControllerDelegate>{

    UIImagePickerController *imagePicker;
    UIImage *eventPhoto;
    IBOutlet UIImageView *imageView;

}

-(IBAction)TakePhoto;
- (IBAction)takeVideo:(id)sender;
@property (copy,   nonatomic) NSURL *movieURL;
@property (strong, nonatomic) MPMoviePlayerController *movieController;



@end

.m文件

#import "addEventViewController.h"

@interface addEventViewController (){

}

@end

@implementation addEventViewController


-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{

    // FOR THE TAKE PHOTO
    eventPhoto = [info objectForKey:UIImagePickerControllerOriginalImage];
    [imageView setImage: eventPhoto];
    [self dismissViewControllerAnimated:YES completion:NULL];

    // FOR THE TAKE VIDEO
    self.movieURL = info[UIImagePickerControllerMediaURL];
    [picker dismissViewControllerAnimated:YES completion:NULL];


}


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

    //FOR THE TAKE PHOTO
    [self dismissViewControllerAnimated:YES completion:NULL];

    // FOR THE TAKE VIDEO
    [picker dismissViewControllerAnimated:YES completion:NULL];
}



- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

// TAKE PHOTO BUTTON
-(IBAction)TakePhoto{
    imagePicker = [[UIImagePickerController alloc] init];
    imagePicker.delegate = self;
    [imagePicker setSourceType: UIImagePickerControllerSourceTypeCamera];
    [self presentViewController: imagePicker animated:YES completion:NULL];


}

// TAKE VIDEO BUTTON
- (IBAction)takeVideo:(UIButton *)sender {

    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.allowsEditing = YES;
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;
    picker.mediaTypes = [[NSArray alloc] initWithObjects: (NSString *) kUTTypeMovie, nil];

    [self presentViewController:picker animated:YES completion:NULL];

}



- (void)viewDidAppear:(BOOL)animated {

    self.movieController = [[MPMoviePlayerController alloc] init];

    [self.movieController setContentURL:self.movieURL];
    [self.movieController.view setFrame:CGRectMake (420, 76, 320, 200)];
    [self.view addSubview:self.movieController.view];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(moviePlayBackDidFinish:)
                                                 name:MPMoviePlayerPlaybackDidFinishNotification
                                               object:self.movieController];

    [self.movieController play];

}

- (void)moviePlayBackDidFinish:(NSNotification *)notification {

    [[NSNotificationCenter defaultCenter]removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:nil];



}



- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}



@end

1 个答案:

答案 0 :(得分:1)

我实际上没有编译和运行您的代码,但是看一下,您在类实例中定义imagePicker,而在picker内定义TakePhoto方法。我的猜测是,当你运行整个过程时,方法实例一旦完成就会被销毁。

相反,请尝试使用在类级别声明的单个imagePicker实例,根据用户是否正在加载图像或视频来设置其属性,并相应地设置所选媒体。