#import "ViewController.h"
#import
#import
@interface ViewController ()
{
MPMoviePlayerController *_playerCtrl;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)selectPhoto:(id)sender {
// NSData *data = [UIImageJPEGRepresentation([UIImage imageNamed:], 1)]图像压缩,0.0-1.0
UIImagePickerController *pickVC = [[UIImagePickerController alloc] init];//相册管理器
pickVC.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
//照片可编辑
pickVC.allowsEditing = YES;
pickVC.delegate = self;
[self presentViewController:pickVC animated:YES completion:NULL];
}
- (IBAction)CameraPhoto:(id)sender {
//判断是否有摄像头
BOOL isCamera = [UIImagePickerController isCameraDeviceAvailable: UIImagePickerControllerCameraDeviceRear];
if (!isCamera) {
UIAlertController *alter = [UIAlertController alertControllerWithTitle:@"提示" message:@"没有可用的摄像头" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *action = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
[alter dismissViewControllerAnimated:YES completion:NULL];
}];
[alter addAction:action];
[self presentViewController:alter animated:YES completion:NULL];
return;
}
UIImagePickerController *pickVC = [[UIImagePickerController alloc] init];
pickVC.sourceType = UIImagePickerControllerSourceTypeCamera;
pickVC.delegate = self;
[self presentViewController:pickVC animated:YES completion:NULL];
}
- (IBAction)selectMovie:(id)sender {
UIImagePickerController *pickVC = [[UIImagePickerController alloc] init];
pickVC.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;//指定的资源类型
pickVC.delegate = self;
//媒体资源类型的过滤
pickVC.mediaTypes = @[@"public.movie"];
[self presentViewController:pickVC animated:YES completion:NULL];
}
- (IBAction)cameraMovie:(id)sender {
}
#pragma mark - UIImagePickerController协议
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
NSLog(@"%@", info);
NSString *mediaType = info[UIImagePickerControllerMediaType];
if ([mediaType isEqualToString:@"public.image"]) {
//1.获取到被选择的图片
UIImage *image = info[UIImagePickerControllerEditedImage];
//2.将其显示在界面上
self.imageView.image = image;
//3.如果照片来自于摄像头则保存照片到相册。
if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) {
UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL);//写入
}
} else if ([mediaType isEqualToString:@"public.movie"]) {
//如果为视频,则获取到此视频资源的URL地址
NSURL *url = info[UIImagePickerControllerMediaURL];
//播放此视频
_playerCtrl = [[MPMoviePlayerController alloc] initWithContentURL:url];
_playerCtrl.view.frame = CGRectMake((self.view.frame.size.width - 300) / 2, 100, 300, 200);
[self.view addSubview:_playerCtrl.view];
//开始播放
[_playerCtrl prepareToPlay];
[_playerCtrl play];
}
[picker dismissViewControllerAnimated:YES completion:NULL];
}
//照片保存至相册后调用的方法
- (void)image:(UIImage *)image didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo {
NSLog(@"保存成功");
}
------------------------------音频---------------------------------
@interface ViewController () {
AVAudioPlayer *audioPlayer;//本地音频
AVPlayer *player;//网络音频
SystemSoundID soundID;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//1.AVAudioPlayer播放本地音频
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"浮夸" ofType:@"mp3"];
//urlWithString:只适用于网络URL!
//fileURLWithPath:适用于本地URL!
NSURL *url = [NSURL fileURLWithPath:filePath];
NSError *error = nil;
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
if (error) {
NSLog(@"error:%@", error);
return;
}
audioPlayer.delegate = self;
audioPlayer.currentTime = 20;
[audioPlayer prepareToPlay];
[audioPlayer play];
//如果需要后台播放音频文件,需要两步设置
// 1.设置音频会话的类型
AVAudioSession *session = [AVAudioSession sharedInstance];//单例类,管理对象
[session setCategory:AVAudioSessionCategoryPlayback error:NULL];//设置播放类型
[session setActive:YES error:NULL];
// 2.info.plist配置文件中增加设置。
//2.AVPlayer播放网络音频
// NSURL *url = [NSURL URLWithString:@"http://218.76.27.57:8080/chinaschool_rs02/135275/153903/160861/160867/1370744550357.mp3"];
// player = [[AVPlayer alloc] initWithURL:url];
//
// [player play];
//3.直接注册为系统声音进行播放(时长小于30s的音频文件,格式一般为wav,caf,aiff)
//不需要进行音频文件的解压和解码,提高CPU的运行效率。
// NSString *sysString = [[NSBundle mainBundle] pathForResource:@"guitar" ofType:@"caf"];
// NSURL *sysURL = [NSURL fileURLWithPath:sysString];
// //把本地音频文件注册成系统声音
// soundID = 0;
//
// AudioServicesCreateSystemSoundID((__bridge CFURLRef)sysURL, &soundID);
//
// //播放系统声音
// AudioServicesPlaySystemSound(soundID);
//
// //播放振动
// AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
}
- (void)dealloc {
//移除注册的系统声音,如果想要重新使用此声音则需要重新注册
AudioServicesRemoveSystemSoundCompletion(soundID);
//停止播放系统声音,但此时此声音还是注册的系统声音
//AudioServicesDisposeSystemSoundID(soundID);
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - AVAudioPlayerDelegate
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag {
NSLog(@"播放完成");
}
-----------------------桥接---------------------------
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// NSString *str = @"hello world"; //malloc free
//
// CFStringRef cString = (__bridge_retained CFStringRef)str;32,33是的等价的
// CFStringRef cString = CFBridgingRetain(str);
//
// //手动释放内存
// CFRelease(cString);
CFStringRef cfString = CFStringCreateWithFormat(kCFAllocatorDefault, NULL, (CFStringRef)@"helloworld");
//NSString *ocString = (__bridge_transfer NSString *)cfString;
NSString *ocString = CFBridgingRelease(cfString);
//内存管理权转移给ARC,此时不需要再手动释放CF对象的内存
//CFRelease(cfString);
}