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

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

先上我的效果图:

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏静晴轩

所历前端“姿势”更替记(其一)

写作是为了光阴流逝使我心安。在上一篇 Vue ES6 Jade Scss Webpack Gulp中,阐述了现如今从事前端工作的“打开方式”;然而,虽到目前为...

3556
来自专栏谈补锅

iOS开发之多媒体API (转载)

视频格式可以分为适合本地播放的本地影像视频和适合在网络中播放的网络流媒体影像视频两大类。尽管后者在播放的稳定性和播放画面质量上可能没有前者 优秀,但网络流媒体影...

1712
来自专栏iOS开发攻城狮的集散地

iOS 传感器集锦

连续三次指纹识别错误后,会自动弹出密码框,通过Touch ID的密码进行身份验证,如果此时取消密码验证,再2次指纹识别失败后,也就是 3 + 2 = 5次指纹识...

2708
来自专栏DeveWork

低多边形(Low-Poly)简介及相关素材分享下载

最近一直缺乏原创文章,只因被各种琐事所累,难以静下心来写文章。这篇文章也非原创,分享下我知道的一些低多边形(Low-Poly)的素材。低多边形(Low-Poly...

28810
来自专栏向治洪

andriod游戏音效

同学们在玩游戏的时候应该都会发现游戏中会有两种形式来播放音乐 ,一般设置选项中会明确标明 设置游戏音乐 与设置游戏音效。 客观的分析一下这两种形式的音乐,游戏背...

2236
来自专栏大数据钻研

漫谈前端之路

前言 前端之路何其漫漫~ 说明:本篇文章原是写给学弟学妹的,但想来花的功夫确实不少,就把此篇文章当做自己的一个阶段性总结文章了,会保持长期更新。 HTM...

4618
来自专栏BestSDK

一件交互设计大事,确定按钮放在左还是右?

其实这个问题,连世界最大的IT公司都没有确切的答案。 苹果说,不论移动或电脑设备,行动按钮(Action button)都放在右边,也就是说*确定按钮放在右边...

4407
来自专栏Android机动车

Material Design 在 Android 中的应用

我刚来这个公司的时候,每个周三都会有分享会,主题自定,分享对象尽量是面向大众,一开始觉得不错,但是到后面发现分享的内容不是那么有营养,而且积极性不是很高,都是当...

1122
来自专栏PHP在线

前端资源分享——只为更好前端

一、团队组织 网站说明腾讯 AlloyTeam 团队腾讯Web前端团队,代表作品WebQQ,致力于前端技术的研究ISUX腾讯社交用户体验设计,简称ISUX,腾...

1.8K10
来自专栏编程思想之路

Android中View研究自学之路 Android6.0源码分析之View(一)Android6.0源码分析之View(二)

Android中View研究自学之路 http://blog.csdn.net/zrf1335348191/article/details/54171263 ...

2237

扫码关注云+社区

领取腾讯云代金券