这两天参加面试,有个公司先出了机试题,然后才能进入下一步,机试题大意是要求实现:地图定位、拍照并显示照片、录制视频并且播放视频三个小功能。
先上我的效果图:
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;
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
@implementation ViewController
- (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];
}
DEMO下载:
github地址:https://github.com/xiaotanit/Tan_LocationPhotoVideo