设备简单应用

相册和相机的加载

// 里面预制了和系统设备资源相关的常量和一些参数

#import <MobileCoreServices/MobileCoreServices.h>

// 看某个资源是否可用

            if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

                [self loadImagePickeWithSourceType:UIImagePickerControllerSourceTypeCamera];

            }           

            if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {

                [self loadImagePickeWithSourceType:UIImagePickerControllerSourceTypePhotoLibrary];

              // 系统封装好的加载相机、相册库的类

              UIImagePickerController * picker = [[UIImagePickerController alloc]init];              

              // 加载不同的资源

               picker.sourceType = type;

               // 是否允许picker对图片资源进行优化

              picker.allowsEditing = YES;

               // 设置代理

              picker.delegate = self;         

              // 软件中习惯通过present方式呈现相册库

              [self presentViewController:picker animated:YES completion:^{

             }];

             }

// 点击cancel按钮的时候,调用此方法

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker


// 点击choose按钮,触发此方法

// info 带有选中资源信息

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

// 获取资源类型 

NSString * mediaType = [info objectForKey:UIImagePickerControllerMediaType];

// kUTTypeImage 代表图片资源类型

    if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {        

        // 手机拍摄的照片大概在两兆左右,甚至更大,拿到程序中对图片进行频繁处理之前,需要对图片进行装换,否则很容易引起内存溢出(在模拟器运行可以,在真机容易溢出内存) 程序被操作系统杀掉

        // 直接拿到选中的图片

        UIImage * image = [info objectForKey:UIImagePickerControllerEditedImage];        

        // 对图片进行处理  借助第三方库

        UIImage * smallImage = [[ImageTool shareTool] resizeImageToSize:CGSizeMake(320, 480) sizeOfImage:image];

        // 渲染图片

        self.view.backgroundColor = [UIColor colorWithPatternImage:smallImage];

    }

    [picker dismissViewControllerAnimated:YES completion:^{

        

    }];



// 音频播放

// 里面预制了音频播放器和视频播放器

#import <AVFoundation/AVFoundation.h>

NSString * path = [[NSBundle mainBundle] pathForResource:@"song1" ofType:@"mp3"];

            if (path.length == 0) {

        NSLog(@"没有读到资源");

        return;

    }

    // fileURLWithPath 本地资源路径,调用次方法

    NSURL * url = [NSURL fileURLWithPath:audioPath];

    if (_audioPlayer) {

        _audioPlayer = nil;

    }

    _audioPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:url error:nil];

    // 设置代理

    _audioPlayer.delegate = self;

    // 播放前预处理

    [_audioPlayer prepareToPlay];

    // 播放

    [_audioPlayer play];

// 停止播放

- (void)stopAudioPlayer

{

    if (_audioPlayer) {

        [_audioPlayer stop]; // 停止播放

        _audioPlayer = nil;

    }

}


// 一首歌播放完成之后,调用此方法

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag

// 当操作系统级别的功能个介入(短信,电话),播放器被打段时,调用此方法

- (void)audioPlayerBeginInterruption:(AVAudioPlayer *)player

// 结束被打断时调用

- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player withOptions:(NSUInteger)flags

{

    if (player) {

        [player play]; // 播放和继续播放

      }

}



// 视频播放

#import <MediaPlayer/MediaPlayer.h>

NSString * path = [[NSBundle mainBundle] pathForResource:@"1" ofType:@"mp4"];

        if (path.length == 0) {

        NSLog(@"没有找到资源");

        return;

    }

    NSURL * url;

    // https 更安全的HTTP协议

    if ([path rangeOfString:@"http://"].location != NSNotFound||[VideoPath rangeOfString:@"https://"].location != NSNotFound) {

        // 远程地址

        url = [NSURL URLWithString:VideoPath];

    }else{

        url = [NSURL fileURLWithPath:VideoPath];

    }

    if (!_playerController) {

        _playerController = [[MPMoviePlayerViewController alloc]initWithContentURL:url];

        // movePlayer 视频播放器,底层封装了AVPlayer

        // 指定资源类型

        _playerController.moviePlayer.movieSourceType = MPMovieSourceTypeFile;

        [self presentViewController:_playerController animated:YES completion:^{

            [self stopAudioPlayer]; // 关闭音频播放器

        }];        

        [_playerController.moviePlayer prepareToPlay];

        [_playerController.moviePlayer play];        

        // NSNotificationCenter 通知中心,单例,可以理解为程序中的广播站

        // 在通知中心注册self成为某条广播的观察者(具有接收某条广播的能力的一个对象)

        // neme 代表广播的名称

        // object 可以实现传值

        // 作用:一旦有其它对象通过通知中心发送 MPMoviePlayerPlaybackDidFinishNotification 这条广播,self 就能接收到,进而触发Selector方法

        // 涉及到对象一对多的场景,效率低于代理,效率最高的是block

        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playFinished) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];

        // 通过通知中心发广播

        // 点击done按钮,播放器会自动通过控制中心发送这条广播

        // [[NSNotificationCenter defaultCenter] postNotificationName:MPMoviePlayerPlaybackDidFinishNotification object:nil];

    }

- (void)playFinished

{

    // 通过通知中心注销self对广播的观察

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

    if (_playerController) {

        [_playerController.moviePlayer stop];

        _playerController = nil;

    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值