重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
打开相机:
成都创新互联公司是一家专注于成都网站设计、成都网站制作与策划设计,龙里网站建设哪家好?成都创新互联公司做网站,专注于网站建设十余年,网设计领域的专业建站公司;建站业务涵盖:龙里等地区。龙里做网站价格咨询:18980820575
[cpp] view plain copy
//先设定sourceType为相机,然后判断相机是否可用(ipod)没相机,不可用将sourceType设定为相片库
UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypeCamera;
// if (![UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]) {
// sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
// }
//sourceType = UIImagePickerControllerSourceTypeCamera; //照相机
//sourceType = UIImagePickerControllerSourceTypePhotoLibrary; //图片库
//sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; //保存的相片
UIImagePickerController *picker = [[UIImagePickerController alloc] init];//初始化
picker.delegate = self;
picker.allowsEditing = YES;//设置可编辑
picker.sourceType = sourceType;
[self presentModalViewController:picker animated:YES];//进入照相界面
[picker release];
打开相册:(区分pad和iphone)
for iphone:
[cpp] view plain copy
UIImagePickerController *pickerImage = [[UIImagePickerController alloc] init];
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {
pickerImage.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
//pickerImage.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
pickerImage.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:pickerImage.sourceType];
}
pickerImage.delegate = self;
pickerImage.allowsEditing = NO;
[self presentModalViewController:pickerImage animated:YES];
[pickerImage release];
for ipad:
[cpp] view plain copy
UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
//sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; //保存的相片
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = NO;//是否允许编辑
picker.sourceType = sourceType;
/*
如果从一个导航按钮处呈现,使用:
presentPopoverFromBarButtonItem:permittedArrowDirections:animated:;
如果要从一个视图出呈现,使用:
presentPopoverFromRect:inView:permittedArrowDirections:animated:
如果设备旋转以后,位置定位错误需要在父视图控制器的下面方法里面重新定位:
didRotateFromInterfaceOrientation:(在这个方法体里面重新设置rect)
然后再次调用:
- (void)presentPopoverFromRect:(CGRect)rect inView:(UIView *)view permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated
*/
//UIPopoverController只能在ipad设备上面使用;作用是用于显示临时内容,特点是总是显示在当前视图最前端,当单击界面的其他地方时自动消失。
UIPopoverController *popover = [[UIPopoverController alloc]initWithContentViewController:picker];
self.imagePicker = popover;
//permittedArrowDirections 设置箭头方向
[self.imagePicker presentPopoverFromRect:CGRectMake(0, 0, 300, 300) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
[picker release];
[popover release];
点击相册中的图片 货照相机照完后点击use 后触发的方法
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary
*)info
点击cancel 调用的方法
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
1、统一收键盘的方法
[[[UIApplication sharedApplication] keyWindow] endEditing:YES];
2、提示框
BBAlertView *alert = [[BBAlertView alloc] initWithStyle:BBAlertViewStyleDefault
Title:@"删除订单"
message:@"是否删除订单,"
customView:nil
delegate:self
cancelButtonTitle:L(@"取消")
otherButtonTitles:L(@"确认")];
[alert setCancelBlock:^{
}];
[alert setConfirmBlock:^{
[self orderDidRemovePressDown:tempDic Index:index.section];
}];
[alert show];
3、图片的自适应功能
self.brandImage.contentMode = UIViewContentModeScaleAspectFit;
4、cocoaPods清除缓存问题
$ sudo rm -fr ~/.cocoapods/repos/master
$ pod setup
5、设置显示键盘的样式
textView.keyboardType =UIKeyboardTypeDefault;
//设置键盘右下角为完成(中文输入法下)
textView.returnKeyType=UIReturnKeyDone;
6、输出当前时间
NSDateFormatter * dateFormatter=[[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSS"];
NSLog(@"当前毫秒时间1==%@",[dateFormatter stringFromDate:[NSDate date]]);
7、显示两秒然后消失
UILabel * lab=[[UILabel alloc]initWithFrame:CGRectMake(60,Main_Screen_Height-64-49-60, Main_Screen_Width-120, 50)];
lab.backgroundColor=[UIColor grayColor];
ViewRadius(lab, 20);
lab.textAlignment=NSTextAlignmentCenter;
lab.text=@"请先进行实名制验证";
[self.view addSubview:lab];
[UILabel animateWithDuration:2 animations:^{
lab.alpha=0;
}completion:^(BOOL finished) {
[lab removeFromSuperview];
}];
8、设置placeholder属性的大小和颜色
[_phoneFie setValue:[UIColor grayColor] forKeyPath:@"_placeholderLabel.textColor"];
[_phoneFie setValue:[UIFont boldSystemFontOfSize:15] forKeyPath:@"_placeholderLabel.font"];
_phoneFie.returnKeyType=UIReturnKeyDone;
9、设置cell的交互完全不可以使用
//[cellTwo setUserInteractionEnabled:NO];
//设置cell不可以点击,但是上面的子控件可以交互
cellTwo.selectionStyle=UITableViewCellSelectionStyleNone;
10、将textField的placeholder 属性的字体向右边移动5
_field.leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10*Width_375, _field.frame.size.height)];
_field.leftViewMode = UITextFieldViewModeAlways;
11、开新线程使按钮上的时间变化
-(void)startTime{
__block int timeout=60; //倒计时时间
UIButton * btn=(UIButton *)[self.view viewWithTag:1000];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_source_t _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);
dispatch_source_set_timer(_timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒执行
dispatch_source_set_event_handler(_timer, ^{
if(timeout=0){
dispatch_source_cancel(_timer);
dispatch_async(dispatch_get_main_queue(), ^{
[btn setTitle:@"发送验证码" forState:UIControlStateNormal];
btn.enabled = YES;
});
}else{
// int minutes = timeout / 60;
int miao = timeout % 60;
if (miao==0) {
miao = 60;
}
NSString *strTime = [NSString stringWithFormat:@"%.2d", miao];
dispatch_async(dispatch_get_main_queue(), ^{
[btn setTitle:[NSString stringWithFormat:@"剩余%@秒",strTime] forState:UIControlStateNormal];
btn.enabled = NO;
});
timeout--;
}
});
dispatch_resume(_timer);
}
12、隐藏TableView 中多余的行
UIView * view=[[UIView alloc]initWithFrame:CGRectZero];
[_tabelView setTableFooterView:view];
13、UIView添加背景图片
UIImage * image=[UIImage imageNamed:@"friend750"];
headSeV.layer.contents=(id)image.CGImage;
14、UITableView取消选中状态
[tableView deselectRowAtIndexPath:indexPath animated:YES];// 取消选中
15、带属性的字符串
NSFontAttributeName 字体
NSParagraphStyleAttributeName 段落格式
NSForegroundColorAttributeName 字体颜色
NSBackgroundColorAttributeName 背景颜色
NSStrikethroughStyleAttributeName 删除线格式
NSUnderlineStyleAttributeName 下划线格式
NSStrokeColorAttributeName 删除线颜色
NSStrokeWidthAttributeName 删除线宽度
NSShadowAttributeName 阴影
1. 使用实例
UILabel *testLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 100, 320, 30)];
testLabel.backgroundColor = [UIColor lightGrayColor];
testLabel.textAlignment = NSTextAlignmentCenter;
NSMutableAttributedString *AttributedStr = [[NSMutableAttributedString alloc]initWithString:@"今天天气不错呀"];
[AttributedStr addAttribute:NSFontAttributeName
value:[UIFont systemFontOfSize:16.0]
range:NSMakeRange(2, 2)];
[AttributedStr addAttribute:NSForegroundColorAttributeName
value:[UIColor redColor]
range:NSMakeRange(2, 2)];
testLabel.attributedText = AttributedStr;
[self.view addSubview:testLabel];
16、加大按钮的点击范围
把UIButton的frame 设置的大一些,然后给UIButton设置一个小些的图片
[tmpBtn setImageEdgeInsets:UIEdgeInsetsMake(5, 5, 5, 5)];
// 注意这里不能用setBackgroundImage
[tmpBtn setImage:[UIImage imageNamed:@"testBtnImage"] forState:UIControlStateNormal];
17、//避免self的强引用
__weak ViewController *weakSelf = self;
18、//类别的创建
command +n ——Objective-C File———(File Type 选择是类别还是扩展)———(Class 选择为哪个控件写类别)
19、修改UITableview 滚动条颜色的方法
self.tableView.indicatorStyle=UIScrollViewIndicatorStyleWhite;
20、利用UIWebView显示pdf文件
webView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 0, 320, 480)];
[webView setDelegate:self];
[webView setScalesPageToFit:YES];
[webViewsetAutoresizingMask:UIViewAutoresizingFlexibleWidth |UIViewAutoresizingFlexibleHeight];
[webView setAllowsInlineMediaPlayback:YES];
[self.view addSubview:webView];
NSString *pdfPath = [[NSBundle mainBundle]pathForResource:@"ojc" ofType:@"pdf"];
NSURL *url = [NSURLfileURLWithPath:pdfPath];
NSURLRequest *request = [NSURLRequestrequestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:5];
[webView loadRequest:request];
21、将plist文件中的数据赋给数组
NSString *thePath = [[NSBundle mainBundle]pathForResource:@"States" ofType:@"plist"];
NSArray *array = [NSArrayarrayWithContentsOfFile:thePath];
22、隐藏状态栏
[[UIApplication shareApplication]setStatusBarHidden: YES animated:NO];
23、给navigation Bar 设置title颜色
UIColor *whiteColor = [UIColor whiteColor];
NSDictionary *dic = [NSDictionary dictionaryWithObject:whiteColor forKey:NSForegroundColorAttributeName];
[self.navigationController.navigationBar setTitleTextAttributes:dic];
24、使用AirDrop 进行分享
NSArray *array = @[@"test1", @"test2"];
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:array applicationActivities:nil];
[self presentViewController:activityVC animated:YES
completion:^{
NSLog(@"Air");
}];
25、把tableview里面Cell的小对勾的颜色改成别的颜色
_mTableView.tintColor = [UIColor redColor];
26、UITableView去掉分割线
_tableView.separatorStyle = NO;
27、正则判断手机号码地址格式
- (BOOL)isMobileNumber:(NSString *)mobileNum {
// 电信号段:133/153/180/181/189/177
// 联通号段:130/131/132/155/156/185/186/145/176
// 移动号段:134/135/136/137/138/139/150/151/152/157/158/159/182/183/184/187/188/147/178
// 虚拟运营商:170
NSString *MOBILE = @"^1(3[0-9]|4[57]|5[0-35-9]|8[0-9]|7[06-8])\\d{8}$";
NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE];
return [regextestmobile evaluateWithObject:mobileNum];
}
28、控制交易密码位数
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
if (textField.text.length =6){
[MBProgressHUD showMessage:@"密码为6位" afterDelay:1.8];
return NO;
}
return YES;
}
29、判断是不是空
if ([real_name isKindOfClass:[NSNull class]] ) {
return NO;}
30、点击号码拨打电话
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://400966220"]];
31、控制UITabbar的选择哪一个
[self.tabBarController setSelectedIndex:1];
32、获取当前App的版本号
NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
CFShow(infoDictionary);
// app名称
NSString *app_Name = [infoDictionary objectForKey:@"CFBundleDisplayName"];
// app版本
NSString *app_Version = [infoDictionary objectForKey:@"CFBundleShortVersionString"];
// app build版本
NSString *app_build = [infoDictionary objectForKey:@"CFBundleVersion"];
33、苹果app权限NSPhotoLibraryUsageDescriptionApp需要您的同意,才能访问相册NSCameraUsageDescriptionApp需要您的同意,才能访问相机NSMicrophoneUsageDescriptionApp需要您的同意,才能访问麦克风NSLocationUsageDescriptionApp需要您的同意,才能访问位置NSLocationWhenInUseUsageDescriptionApp需要您的同意,才能在使用期间访问位置NSLocationAlwaysUsageDescriptionApp需要您的同意,才能始终访问位置NSCalendarsUsageDescriptionApp需要您的同意,才能访问日历NSRemindersUsageDescriptionApp需要您的同意,才能访问提醒事项NSMotionUsageDescriptionApp需要您的同意,才能访问运动与健身NSHealthUpdateUsageDescriptionApp需要您的同意,才能访问健康更新NSHealthShareUsageDescriptionApp需要您的同意,才能访问健康分享NSBluetoothPeripheralUsageDescriptionApp需要您的同意,才能访问蓝牙NSAppleMusicUsageDescriptionApp需要您的同意,才能访问媒体资料库
34、控件设置边框
_describText.layer.borderColor = [[UIColor colorWithRed:215.0 / 255.0 green:215.0 / 255.0 blue:215.0 / 255.0 alpha:1] CGColor];
_describText.layer.borderWidth = 1.0;
_describText.layer.cornerRadius = 4.0;
_describText.clipsToBounds = YES;
35、//隐藏电池条的方法
-(BOOL)prefersStatusBarHidden{
return YES;
}
36、延时操作
[NSThread sleepForTimeInterval:2];
方法二:
[self performSelector:@selector(delayMethod) withObject:nil afterDelay:1.5];
37、系统风火轮:
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO; //隐藏
38、//didSelectRowAtIndexPath:方法里面找到当前的Cell
AssessMentCell * cell = [tableView cellForRowAtIndexPath:indexPath];
39、navigation上返回按钮的颜色以及返回按钮后面文字去掉
//返回按钮后边文字去掉
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60)
forBarMetrics:UIBarMetricsDefault];
//设置左上角返回按钮的颜色
self.navigationController.navigationBar.tintColor = UIColorFromRGB(0x666666);
40、lineBreakMode //设置文字过长时的显示格式
label.lineBreakMode = NSLineBreakByCharWrapping;以字符为显示单位显
示,后面部分省略不显示。
label.lineBreakMode = NSLineBreakByClipping;剪切与文本宽度相同的内
容长度,后半部分被删除。
label.lineBreakMode = NSLineBreakByTruncatingHead;前面部分文字
以……方式省略,显示尾部文字内容。
label.lineBreakMode = NSLineBreakByTruncatingMiddle;中间的内容
以……方式省略,显示头尾的文字内容。
label.lineBreakMode = NSLineBreakByTruncatingTail;结尾部分的内容
以……方式省略,显示头的文字内容。
label.lineBreakMode = NSLineBreakByWordWrapping;以单词为显示单位显
示,后面部分省略不显示。
在iOS 13中,苹果终于推出了多摄像头同步开启支持,允许应用程序在iPhone或iPad上同时捕获来自多个麦克风和摄像头的照片、视频、音频,元数据和深度信息。
自从OS X Lion以来,苹果长期一直支持macOS上的多摄像头捕获,但到目前为止,硬件限制使其无法推出适用于iPhone和iPad的API。
iOS 13中的新功能和API将允许开发人员提供同时从前置摄像头和后置摄像头传输视频、照片或音频的应用程序。
iOS 13多摄像头支持w/ AVCapture
在WWDC19期间推出新功能时,苹果演示了一个画中画视频录制应用,该应用从前置摄像头录制,同时还可以从主摄像头录制。
该演示应用程序还启用了视频录制功能,以及在照片应用播放期间即时交换两个摄像头的功能。该功能还可以让开发人员控制双TrueDepth摄像头,包括后视宽角镜头或后视长焦镜头的单独视频流。
iOS 13支持新的多摄像头功能,仅适用于较新的硬件,包括iPhone XS、iPhone XS Max、iPhone XR和iPad Pro。
苹果列出了许多支持多摄像头捕获的格式(如上图所示),开发人员会注意到它会对相机的正常功能施加一些人为限制。
由于移动设备的功率限制,与Mac不同,iPhone和iPad将仅限于单个多摄像头会话,这意味着你无法同时在多个应用中开启多个摄像头,或者使用多个摄像头进行多个会话。还将有各种支持的设备组合,指示在某些设备上支持哪些摄像机的捕获组合。
苹果本身并没有在iOS 13相机应用程序中使用任何新的多摄像头功能,但我们认为它现在正在出现,因为它正式在AVCapture中推出了支持。
Semantic Segmentation Mattes(语义分割蒙版)
iOS 13中相机捕捉的新功能还有语义分割蒙版。在iOS 12中,苹果在内部使用了Portrait Effects Matte为人像模式照片设置内容,将主体与背景分开。在iOS 13中,苹果推出了所谓的Semantic Segmentation Mattes来识别皮肤、头发和牙齿,并通过API进一步改进这些信息,供开发人员使用。
在WWDC会议上,苹果展示了新技术的演示应用程序,允许将照片中的主体与背景分离,并将头发、皮肤和牙齿隔离,以轻松添加效果,包括面部涂料和头发颜色变化(如上图)。
开发人员可以在苹果的网站上了解有关多摄像头支持和语义分段的更多信息,它还提供了演示应用程序的示例代码。
Camera+ ($3)
即使更新到最新版本的 iOS 系统,苹果原生的相机软件也是比较弱鸡的。还好我们有 Camera+,可以调节曝光以及其他复杂的操作,比如连续闪光,正面闪光,触摸对焦调整,6 倍数码变焦,定时器和预设滤镜。而且软件的操作界面非常友好,操作非常便捷,随时可以将照片上传到 snapping 或者其他社交媒体平台。
ProCamera ($5)
在 iOS 8 发布的时候,开发者 Cocologics 决定放弃更新现有的 ProCamera 软件,然后重做一款全新的摄影软件。这个全新版本的 ProCamera——现已经针对 iOS10 进行优化——操作界面仍旧简单快捷,但却可以实现非常复杂的操作:设置曝光时间,色调,ISO 感光度等。除了强大的曝光控制和 70 多种独特的滤镜特效,ProCamera 甚至还具有夜间照相机和全分辨率预览功能。
Darkroom
因为缺乏相关的美学基础,所以这个软件的名字可能会被大家误解。但是 Darkroom 确实像它的名字一样,通过设计一个黑色的界面,让你的照片看起来更加耀眼。这款软件和 Lightroom 比较类似,可以调节色相、饱和度和亮度(HSL)或者调整曲线。除此以外还整合一些其他软件的功能,比如集成了 VSCO 的所有滤镜。这款软件 iOS 应用商店的评分是 4.9 分,所以没啥可以犹豫的了——而且它还是免费的哟。
Halide ($5)
如果你是一名初学者,想一点点从自动模式进阶为手动模式,那么 Halide 就是你的不二之选了。自动模式可以轻松捕捉精彩瞬间,而峰值对焦工具,支持 RAW 格式照片可以帮助用户发挥极致的创意,同时软件的操作界面简单友好。Halide 甚至支持人像特效,功能媲美最新款 iPhone 的肖像模式。
Pro HDR X ($2)
ProHDR X 大概是所有 HDR 特效软件里面最全能的,没有之一。与之前版本不同,ProHDR X 重新设计了 UI 界面,降低操作门槛,让普通摄影爱好者也可以操作自如。ProHDR X 支持更为广泛的曝光调整控制以及色调匹配,而且可以将单反相机拍摄的照片(最高支持 2400 万像素)导入到软件的内置照片库。同时 ProHDR X 也提供了大量优秀的预设可供选择,如果需要,甚至可以进行数字缩放、裁剪、字幕和设置自拍定时器等操作。
Adobe Photoshop Express
说到照片后期处理,没人敢说比 Adobe 更专业。尽管他们的桌面版本软件享誉世界,但是手机上移动版本的操作种类比其他同类软件少了很多。但是这丝毫不影响 Adobe Photoshop Express 仍旧是市面上最佳的后期软件之一。软件支持常用的 Photoshop 功能如图层、选择工具和调整、添加文本、效果应用以及混合图像等。不过,很多功能只有在付费后才能使用。所以如果选择了 Adobe Photoshop Express,那么就要做好钱包出血的准备咯~
Adobe Lightroom
尽管 Adobe 公司的很多软件只支持较新版本的 iPhone,但这丝毫不能影响其在我们软件名单上举足轻重的地位,尤其是那些在旅途中对照片进行后期处理的摄影师们。Lightroom 会自动与桌面设备同步图像——无论是智能手机拍摄的图像还是单反拍摄的原始图像,都可以灵活使用各种熟悉的工具快速编辑、美化并且分享。在 iOS10 系统中,Lightroom 已经开始支持 RAW 格式的导入和编辑。
如果只字不提滤镜之王,我们整理的软件名单估计就没啥说服力了。或许有数十种软件可以实现相同的功能,但是 Instagram 始终保持最庞大的用户群体。Instagram 不仅提供了一系列经典滤镜可供使用,同时对照片进行评论、点赞或者分享,甚至可以直接将照片发给特定的好友。
Pixlr
网页版本的 Pixlr 一直都是最受大家喜爱的照片后期工具,好消息是 Pixlr 已经推出了手机版本软件。在调整照片大小时,Pixlr 支持从四个预先定义的尺寸中进行选择,并可进行裁剪、旋转、风格化并进行照片分享。灯光和叠加效果甚至可以改善心情,而一键调整则可以快速自动地完成后期工作。
Facetune 2
不是所有人都非常上相,况且很多时候你在 snap 上传你和你朋友照片的时候,和本人也是有区别的。通过 Facetune 2,你可以将任何「见光死」的自拍变成万人迷。软件支持多种美化,比如牙齿美白、去除污点和颜色校正,使面孔看起来非常完美,以便于上传到社交网络。最厉害的是,Facetune 2 甚至可以改变眼睛或者头发的颜色。
Photo Editor by Aviary
如果想要一个好用而且免费的后期软件,推荐使用 Photo Editor by Aviary。被 Adobe 公司收购后,软件得以强化很多复杂功能,并且操作界面更加友好。Photo Editor by Aviary 支持在线购买滤镜预设,而且有大量预设和其他资源可供选择。和 Facetune 类似,Aviary 也支持消除红眼、增白牙齿等功能。除此以外,还支持增加文字、替换颜色和社交网络。但是需要注意的是,Photo Editor by Aviary 已经超过 11 个月没有更新了,所以不支持近期发布手机的最新功能。同时未来也很难看到 Photo Editor by Aviary 的重大更新了。
Horizon Camera
我们一般情况下从不竖着手机拍摄视频。但是万一你的猪队友没有横向拍视频,Horizon Camera 就可以用来救场了。Horizon 可以强制手机只在横向时拍摄视频,即使旋转手机也可以保持水平角度不变。Horizon 支持 60 和 120 帧/秒的慢速模式,并允许以自定分辨率进行录制——当然,前提是在系统允许范围内。
该框架框架包含视频相关的APIs和音频相关的APIs。
针对音频及视频,其主要提供的功能可以归纳为4各方面:
1)、Capture
音频、视频、图像媒体的捕捉,并输出我们可用的数据对象的过程。
2)、Edit
针对现有的媒体片段(音频片段或视频片段),重新创建Assets,重新加工、生成新的媒体片段。例如,Reading, Writing, Reencoding Assets, Thumbnails
3)、Export
提供导出音视频的API。例如,修改文件格式、消减时长等。
4)、Presentation
例如,播放、音视频的预览
设备的输入源主要包括:麦克风(Microphone),摄像头(Camera),屏幕等
输入源一般包括:AVCaptureVideoPreviewLayer,AVCaptureAudioPreviewOutput,文件、Raw Buffer等。
从一个设备,例如照相机或者麦克风管理捕获,组合对象来表示输入和输出,并使用 AVCaptureSession 的实例来协调它们之间的数据流。
一个简单的会话协调:
AVCapture Session作为整个Capture的核心,不断从输入源获取数据,然后分发给各个输出源,从而完成一次简单的会话。
AVCaptureSession参数配置
开始会话
结束会话
然而,很多情况下,需要考虑多个输入源是如何被表示以及如何连接到输出。
输入源有自己的硬件参数可以设置流控,输出源作为一个被动接受对象,它并没有太多流控设置,所以苹果巧妙的引入AVCaptureConnections。每个Output与Session建立连接后,都会分配一个默认的AVCpatureConnection。
AVCaptureConnections就是Session和Output中间的控制节点。很多实时数据,也都是从connection得到的。
输入设备的配置
输出的配置
接收输出资源
1)、视频
2)、照片输出
判断相机的
AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
if (status == AVAuthorizationStatusDenied || status == AVAuthorizationStatusRestricted) {
return NO;
} else {
return YES;
}
判断相册的
ALAuthorizationStatus status = [ALAssetsLibrary authorizationStatus];
if (status == kCLAuthorizationStatusDenied || kCLAuthorizationStatusRestricted) {
return NO;
} else {
return YES;
}