这两天参加面试,有个公司先出了机试题,然后才能进入下一步,机试题大意是要求实现:地图定位、拍照并显示照片、录制视频并且播放视频三个小功能。

先上我的效果图:

  

1、地图定位关键代码(ios8后,开启地图定位需要在工程文件里面设置描述):

//1、添加地图视图CGRect rect =[UIScreen mainScreen].bounds;_mapView= [[MKMapView alloc]initWithFrame:CGRectMake(0, 50, rect.size.width, rect.size.height - 50)];[self.view addSubview:_mapView];//设置代理_mapView.delegate =self;//2、请求定位服务_locationManager =[[CLLocationManager alloc]init];if(![CLLocationManager locationServicesEnabled]||[CLLocationManager authorizationStatus]!=kCLAuthorizationStatusAuthorizedWhenInUse){[_locationManager requestWhenInUseAuthorization];}//3、用户位置追踪_mapView.userTrackingMode =MKUserTrackingModeFollow;//4、设置地图类型_mapView.mapType = MKMapTypeStandard;

View Code

2、拍照和录制视频关键代码: 

#import "ViewController.h"
#import <MobileCoreServices/MobileCoreServices.h>
#import <MediaPlayer/MediaPlayer.h>@interface ViewController () <UINavigationControllerDelegate, UIImagePickerControllerDelegate>@property (weak, nonatomic) IBOutlet UIImageView*imgView; //显示拍照的照片
@property (strong, nonatomic) UIImagePickerController*picker;
@property (assign, nonatomic) BOOL isChange;//是否切换拍照和录制视频
@property (assign, nonatomic) NSInteger currentTag; //当前tag
@property (nonatomic, strong) MPMoviePlayerController*moviePlayer;//视频播放控制器
@property (nonatomic, strong) NSURL *movieUrl; //视频录制路径
@property (nonatomic, strong) UIView *movieView; //播放器的View@end@implementationViewController- (void)viewDidLoad {[super viewDidLoad];//Do any additional setup after loading the view, typically from a nib.
}//初始化picker
- (UIImagePickerController *)picker{if (_isChange || _picker ==nil){_picker=[[UIImagePickerController alloc]init];_picker.sourceType= UIImagePickerControllerSourceTypeCamera;//设置image picker的来源_picker.cameraDevice = UIImagePickerControllerCameraDeviceRear;//设置使用哪个摄像头,这里设置为后置摄像头if (self.currentTag == 1) { //录制视频_picker.mediaTypes = @[(NSString *)kUTTypeMovie];_picker.videoQuality=UIImagePickerControllerQualityTypeIFrame1280x720;_picker.cameraCaptureMode= UIImagePickerControllerCameraCaptureModeVideo;//设置摄像头模式(拍照,录制视频)//NSLog(@"录制视频");
}else{ //拍照_picker.cameraCaptureMode =UIImagePickerControllerCameraCaptureModePhoto;//移除视频播放器控件if (self.moviePlayer !=nil){[self.movieView removeFromSuperview];self.moviePlayer=nil;}}_picker.allowsEditing=YES;//允许编辑_picker.delegate=self;//设置代理,检测操作
}return_picker;
}//视频播放器
-(MPMoviePlayerController *)moviePlayer{if (!_moviePlayer) {_moviePlayer= [MPMoviePlayerController new];_moviePlayer.view.frame=self.imgView.frame;_moviePlayer.view.autoresizingMask= UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;self.movieView=_moviePlayer.view;[self.view addSubview:self.movieView];}_moviePlayer.contentURL=self.movieUrl;return_moviePlayer;
}//拍照和视频录制: tag = 0表示拍照,= 1表示录制视频
- (IBAction)openVideo:(UIButton *)sender {if (self.currentTag != sender.tag) self.isChange =YES;self.currentTag=sender.tag;[self presentViewController:self.picker animated:YES completion:nil];
}#pragma mark - 代理方法
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{NSString*mediaType=[info objectForKey:UIImagePickerControllerMediaType];if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {//当是拍照时UIImage *image;//如果允许编辑则获得编辑后的照片,否则获取原始照片if(self.picker.allowsEditing) {image= [info objectForKey:UIImagePickerControllerEditedImage];//获取编辑后的照片}else{image= [info objectForKey:UIImagePickerControllerOriginalImage];//获取原始照片
}[self.imgView setImage:image];//显示照片//UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);//保存相片到相簿
}else if([mediaType isEqualToString:(NSString *)kUTTypeMovie]){//当是录制视频时
NSURL*url=[info objectForKey:UIImagePickerControllerMediaURL];//视频路径NSString *urlStr=[url path];//         //保存视频到相簿//if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(urlStr)) {//UISaveVideoAtPathToSavedPhotosAlbum(urlStr, self, nil, nil);//保存视频到相簿//}self.movieUrl =[NSURL fileURLWithPath:urlStr];[self.moviePlayer play];}//关闭照片选择器
[self dismissViewControllerAnimated:YES completion:nil];
}

View Code

DEMO下载:

github地址:https://github.com/xiaotanit/Tan_LocationPhotoVideo

原文链接:http://www.cnblogs.com/tandaxia/p/5507154.html

转载于:https://www.cnblogs.com/tandaxia/p/5507154.html

机试题:地图定位、拍照并显示、录制视频并播放相关推荐

  1. Android百度地图定位APP,显示出当前位置坐标

    Android百度地图定位APP,显示出当前位置坐标 官网配置百度地图 通过CMD命令获取SHA1 在百度的官网里面创建一个应用 Android配置 显示地图即定位 配置 AndroidManifes ...

  2. 百度地图定位失败,显示经纬度(4.9E-324,4.9E-324),错误码-162

    百度地图定位失败 现象 经度:4.9E-324 纬度:4.9E-324 错误码:162 分析 查询百度地图官方错误码文档,得知: 原来是因为.so文件加载不成功引起的. 随后,下载了一份百度地图Dem ...

  3. Android 仿微信长按录制视频并播放的功能

    一.点击按钮进行录制 首先要获取摄像拍照的权限和读取权限 <uses-permission android:name="android.permission.CAMERA" ...

  4. mediaRecorder录制视频与播放

    1.添加权限 <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-p ...

  5. Android 开发笔记 Google地图定位与路线显示

    当你的应用需要加入Google地图,并且需要根据两点坐标规划路线时,就需要在应用中加入Google地图,调用指定的api获取路线数据,再把数据显示出来. 1.加载google地图,实例化一个地图视图对 ...

  6. 高德地图定位按钮位置显示

    官方说了,其实是不可以自定义的 But,可以自己定义一个按钮,然后调用 mAMapLocationManager.requestLocationUpdates( LocationProviderPro ...

  7. 基于uniapp+unicloud的日记系统,可课设毕设,有地图定位、图片、视频等功能,可以在手机和模拟器上运行,真机运行

    日记系统 基于uniapp的日记系统,采用unicloud云数据库进行存储,拥有注册登录,发布.删除.修改和查看日记的功能,可以进行地图定位功能,图片.视频的增删改查,还可进行日记首页的封面和头像的更 ...

  8. AS调用百度地图定位

    实验目标: 根据官方文档,开发百度地图定位App,显示出当前位置坐标. 实验内容: 1.注册百度地图开发账号,并获得AK码,参考官方文档https://lbsyun.baidu.com/index.p ...

  9. LBS 百度地图定位APP

    开发百度地图定位APP,显示出当前位置坐标. 显示地图: 第一步 配置AndroidManifest.xml文件 1.配置AndroidManifest.xml文件 在<application& ...

最新文章

  1. C++继承与派生(原理归纳)
  2. 【转载】变量的存储类别
  3. dedecms系统环境需求及注意事项是什么
  4. hadoop 开启防火墙_Hadoop部署一Hadoop安装
  5. 神经网络的梯度消失和过拟合产生原因及其解决方案
  6. Ubuntu下无法使用Secure_CRT连接服务器
  7. Nodejs简单介绍以及在windows环境下安装与配置流程
  8. mac安装thrift
  9. plsql配置连接远程数据库
  10. 使用rvm来管理ruby版本
  11. idp 苹果开发账号续费
  12. BAT架构师推荐的9本程序员技术进阶图书,大家看过多少?
  13. foobar2000实现用手机远程控制PC命令行版
  14. js对象写入键值对_js对象添加键值对
  15. css 如何让盒子垂直居中,css 盒子垂直居中
  16. c语言写流水灯程序,用汇编和C语言 写流水灯程序
  17. array和linked list的区别
  18. 2021-2027全球与中国11-氨基十一烷市场深度研究分析报告
  19. SAP SD VA01 在销售范围中,订单类型XX没有定义
  20. WeaQA:Weak Supervision via Captions for Visual Question Answering 论文笔记

热门文章

  1. 《计算机网络入门到精通》网络体系结构
  2. centos 6.8 挂载NTFS移动硬盘
  3. ValidateInput(false)与this.ValidateRequest = false无效的解决方案
  4. SQL Server数据库的导出
  5. android handler的机制和原理_第一百八十回:Android中的Handler机制九
  6. C++递归或非递归实现n的阶乘
  7. 傅里叶变换常用公式表_25个常用公式计算表+7套施工测量计算表,全自动计算,测量无压力...
  8. 解释logistic回归为什么要使用sigmoid函数
  9. DeFi预言机Umbrella Network与BSC上去中心化杠杆交易协议WOWswap达成合作
  10. DeFi协议ValueDeFi疑似再次遭到攻击