ios应用程序-图像浏览及音频播放

简介:

在这里,主要为大家介绍一下,怎样从相册选取图片并在ImageView中显示出你选择的图片,并且实现简单的音乐和视频播放,下面是运行时的主页面效果图:

202244564.png

下面我们仔细学习具体的细节。创建一个空的IOS项目,接着在创建一个ViewController

AppDelegate.h 应用的代理类这个没什么好说的就是直接打开刚刚创建的新ViewController,在ViewController.h文件里添加如下代码:

#import <UIKit/UIKit.h>

#import <AVFoundation/AVFoundation.h>

#import <MediaPlayer/MediaPlayer.h>

//注意这里面引入了很多代理类

@interface ViewController: UIViewController<UIImagePickerControllerDelegate,UINavigationControllerDelegate,AVAudioPlayerDelegate>


.图片的选取

点击导航栏的photo按钮会跳转到photoView页面,至于如何跳转,下面介绍一种简单的跳转方式,则是在storyboard中右键点中photo拖拉到你要跳转的页面,在storyboard segues中有3个选项,PushModalCustom,选中Modal,再次运行,点击photo页面跳转成功。

202323298.png

这时点击导航栏上的camera,会在下方弹出一个UIActionSheet,选择从手机相册获取之后回呈现相册里的图片,根据需求选择完之后会在ImageView中显示出来相应的图片,具体效果图如下:

202403342.png

在项目中添加类文件photoViewController系统自动生成photoViewController.h (头文件)和photoViewController.m(实现文件),在photoViewController.m中从相册选取图片的主要程序如下:

- (IBAction)btnPressed:(id)sender {

UIActionSheet*actionSheet = [[UIActionSheetalloc]

initWithTitle:nil

delegate:self

cancelButtonTitle:@"取消"

destructiveButtonTitle:nil

otherButtonTitles@"打开照相机"@"从手机相册获取",nil];

   [actionSheet showInView:self.view];

}

- (void)actionSheet:(UIActionSheet *)actionSheetclickedButtonAtIndex:(NSInteger)buttonIndex

{

if (buttonIndex == actionSheet.cancelButtonIndex)

   {

NSLog(@"取消");

   }

switch (buttonIndex)

   {

case 0:  

//打开照相机拍照

           [selftakePhoto];

break;

case 1:

//打开本地相册

           [selfLocalPhoto];

break;

   }

}


-(void)takePhoto

{

UIImagePickerController *picker=[[UIImagePickerControlleralloc]init];

   picker.sourceType = UIImagePickerControllerSourceTypeCamera;

   picker.delegate=self;

   picker.allowsEditing=YES;

   [selfpresentModalViewController:picker animated:YES];

}


-(void)LocalPhoto

{

UIImagePickerController *picker = [[UIImagePickerControllerallocinit];

   picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

   picker.delegate = self;

//设置选择后的图片可被编辑

   picker.allowsEditing = YES;

   [selfpresentModalViewController:picker animated:YES];

}


//实现图像选取器控制器的委托

-(void)imagePickerController:(UIImagePickerController *)pickerdidFinishPickingMediaWithInfo:(NSDictionary *)info

{

//UIImagePickerController选择、显示图片或视频

NSString *type = [info objectForKey:UIImagePickerControllerMediaType];

//当选择的类型是图片

if ([type isEqualToString:@"public.image"])

   {

//先把图片转成NSData

UIImage* image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];

       NSData *data;

//判断图片是不是JPEG格式的文件

if (UIImagePNGRepresentation(image))

       {

           data = UIImageJPEGRepresentation(image, 1.0);

       }

else

       {

           data = UIImagePNGRepresentation(image);

       }

//图片保存的路径

//指定文件目录这里将图片放在沙盒的documents文件夹中

NSString * documentsPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];

//文件管理器

NSFileManager *fileManager = [NSFileManagerdefaultManager];

//把刚刚图片转换的data对象拷贝至沙盒中并保存为image.png

       [fileManager createDirectoryAtPath: documentsPath withIntermediateDirectories:YESattributes:nilerror:nil];

       [fileManager createFileAtPath:[ documentsPath stringByAppendingString:@"/image.png"contents:data attributes:nil];

//得到选择后沙盒中图片的完整路径

filePath = [[NSStringalloc]initWithFormat:@"%@%@", documentsPath,  @"/image.png"];

//关闭相册界面

       [picker dismissModalViewControllerAnimated:YES];

imageView.image = image;

//加在视图中

       [self.viewaddSubview:imageView];

   }

}

二.音乐的播放:

音乐由页面中的PickVideo按钮触发播放音频文件,iPhone开发中想要实现音频的播放是很容易的,AVFoundation框架就是Apple本身推荐使用的一种方式。如何引入这个框架,下面为大家详细介绍:

spacer.gif

首先,点击工程文件夹,会出现左边的界面,选择我圈起来的那个加号,会出现一系列的框架给你选择,你只需要选择AVFoundation.framework即可。此时,在它的上方就会显示出来,这个框架就添加好了。

播放音乐所需要的程序如下:

- (IBAction)playMp4File:(id)sender {

//    //找到mp3在资源库中的路径文件名称为sound 类型为mp3

NSString *soundPath=[[NSBundlemainBundlepathForResource:@"后来"ofType:@"mp3"];

if(soundPath)

   {

NSURL *soundUrl=[[NSURLallocinitFileURLWithPath:soundPath];

player=[[AVAudioPlayerallocinitWithContentsOfURL:soundUrl error:nil];

//初始化播放器

       [playerprepareToPlay];  

//设置播放循环次数,如果numberOfLoops为负数音频文件就会一直循环播放下去

player.numberOfLoops = -1;  

//设置音频音量 volume的取值范围在 0.0为最小 0.1为最大可以根据自己的情况而设置

player.volume = 0.5f;        

   }

//player有值的情况下并且没有在播放中开始播放音乐

if (player)  

   {  

if (![playerisPlaying])  

       {

           [playerplay];  

       }

   }

}


- (IBAction)palyStop:(id)sender {

//停止播放声音

if (player) {  

if ([playerisPlaying]) {  

           [playerstop];  

       }

   }  

}


三.视频的播放:

视频的播放由页面中的play MP4 File play Stop触发,而且播放电影文件时需要注意:ios中可以使用MPMoviePlayerController来播放电影文件这个类定义在MediaPlayer.framework同理,添加MediaPlayer.framework框架

202440293.png

下面是触pivkVideo的代

- (IBAction)pickVideo:(id)sender

{

NSString *videoPath=[[NSBundlemainBundlepathForResource:@"犯罪高手" ofType:@"mp4"];

NSLog(@"%@",videoPath);


if(videoPath)

   {

NSURL *videoUrl=[[NSURLallocinitFileURLWithPath:videoPath];

//视频播放对象

moviePlayer = [[MPMoviePlayerControlleralloc]

initWithContentURL:videoUrl];

//适应屏幕大小,保持宽高比

moviePlayer.controlStyle=MPMovieScalingModeAspectFit;

       [moviePlayer.viewsetFrame:self.view.bounds];

moviePlayer.initialPlaybackTime = -1;

//显示播放/暂停、音量和时间控制

moviePlayer.movieControlMode = MPMovieControlModeDefault;

       [self.viewaddSubview:moviePlayer.view];

// 注册一个播放结束的通知

       [[NSNotificationCenterdefaultCenteraddObserver:selfselector:@selector(myMovieFinishedCallback:)                                                     name:MPMoviePlayerPlaybackDidFinishNotification

object:moviePlayer];

UIToolbar *toolBar=[[UIToolbarallocinitWithFrame:CGRectMake(0, 0, 320, 44)];

UIButton *button=[[UIButtonallocinitWithFrame:CGRectMake(20, 3, 40, 40)];

       [button setTitle:@"back"forState:UIControlStateNormal];

       [button addTarget:selfaction:@selector(backItem) forControlEvents:UIControlEventTouchUpInside];

       [toolBar addSubview:button];

       [moviePlayer.viewaddSubview:toolBar];

       [moviePlayerplay];  

       [moviePlayerstop];

   }

}


-(void)myMovieFinishedCallback:(NSNotification*)notify

{

//视频播放对象

MPMoviePlayerController* theMovie = [notify object];

//销毁播放通知

   [[NSNotificationCenterdefaultCenterremoveObserver:self

name:MPMoviePlayerPlaybackDidFinishNotification

object:theMovie];

   [theMovie.viewremoveFromSuperview];

}



本文转自HDDevTeam 51CTO博客,原文链接:http://blog.51cto.com/hddev/1218425,如需转载请自行联系原作者

相关文章
|
8天前
|
搜索推荐 API 开发工具
打造个性化天气应用:从零开始的iOS开发之旅
【8月更文挑战第31天】本文是一篇针对初学者的iOS应用开发指南,将引导读者通过Swift和iOS SDK构建一个简单而美观的天气应用。我们将探索如何利用API获取实时天气数据,并在应用中实现用户友好的界面设计。文章不仅包括代码示例,还提供了设计理念和用户体验优化的建议,旨在帮助初学者理解iOS开发的基础知识,并激发他们创造个性化应用的兴趣。
|
9天前
|
物联网 区块链 vr&ar
未来已来:探索区块链、物联网与虚拟现实技术的融合与应用安卓与iOS开发中的跨平台框架选择
【8月更文挑战第30天】在科技的巨轮下,新技术不断涌现,引领着社会进步。本文将聚焦于当前最前沿的技术——区块链、物联网和虚拟现实,探讨它们各自的发展趋势及其在未来可能的应用场景。我们将从这些技术的基本定义出发,逐步深入到它们的相互作用和集成应用,最后展望它们如何共同塑造一个全新的数字生态系统。
|
3天前
|
Swift iOS开发 UED
揭秘一款iOS应用中令人惊叹的自定义动画效果,带你领略编程艺术的魅力所在!
【9月更文挑战第5天】本文通过具体案例介绍如何在iOS应用中使用Swift与UIKit实现自定义按钮动画,当用户点击按钮时,按钮将从圆形变为椭圆形并从蓝色渐变到绿色,释放后恢复原状。文中详细展示了代码实现过程及动画平滑过渡的技巧,帮助读者提升应用的视觉体验与特色。
21 11
|
8天前
|
API iOS开发
探索iOS开发:打造你的第一个天气应用
【8月更文挑战第31天】 在这篇文章中,我们将一起潜入iOS开发的海洋,从初学者的角度出发,一步步构建我们自己的天气应用。通过实际的项目实践,你将学习到如何获取网络数据、如何在界面上展示这些数据,以及如何处理用户交互。文章以通俗易懂的语言,结合代码示例,引导你理解并实现一个简单天气应用的核心功能。无论你是编程新手还是希望扩展你的iOS开发技能,这篇文章都将为你提供宝贵的指导和启发。
|
8天前
|
存储 JSON API
探索iOS开发:打造你的第一个天气应用
【8月更文挑战第31天】在这篇文章中,我们将踏上一段激动人心的旅程,从零开始构建一个iOS天气应用。通过这一过程,我们不仅能够掌握Swift编程语言的核心概念,还能深入理解如何与API进行交互以及如何在App Store上发布我们的杰作。无论你是编程新手还是希望扩展你的技能库,这个项目都将为你提供一个实践的平台。让我们携手进入iOS开发的奇妙世界,一步步实现自己的想法,并最终将它们变为现实。
|
17天前
|
测试技术 虚拟化 iOS开发
iOS自动化测试方案(二):Xcode开发者工具构建WDA应用到iphone
这篇文章是iOS自动化测试方案的第二部分,详细介绍了在Xcode开发者工具中构建WebDriverAgent(WDA)应用到iPhone的全过程,包括环境准备、解决构建过程中可能遇到的错误,以及最终成功安装WDA到设备的方法。
59 0
iOS自动化测试方案(二):Xcode开发者工具构建WDA应用到iphone
|
27天前
|
Swift iOS开发 UED
【绝妙创意】颠覆你的视觉体验!揭秘一款iOS应用中令人惊叹的自定义动画效果,带你领略编程艺术的魅力所在!
【8月更文挑战第13天】本文通过一个具体案例,介绍如何使用Swift与UIKit在iOS应用中创建独特的按钮动画效果。当按钮被按下时,其形状从圆形变化为椭圆形,颜色则从蓝色渐变为绿色;释放后,动画反向恢复原状。利用UIView动画方法及弹簧动画效果,实现了平滑自然的过渡。通过调整参数,开发者可以进一步优化动画体验,增强应用的互动性和视觉吸引力。
34 7
|
1月前
|
Swift iOS开发 开发者
探索iOS开发:使用SwiftUI构建现代应用程序
【8月更文挑战第3天】在本文中,我们将一起潜入SwiftUI的世界,这是一个创新的框架,它让iOS应用的开发变得更加简单快捷。我们将通过一个实际的项目示例来展示如何利用SwiftUI的强大功能,快速搭建起一个既美观又实用的应用界面。无论你是刚入门的新手还是寻求提升的开发者,这篇文章都将为你提供宝贵的知识和技能。
47 10
|
8天前
|
图形学 iOS开发 Android开发
从Unity开发到移动平台制胜攻略:全面解析iOS与Android应用发布流程,助你轻松掌握跨平台发布技巧,打造爆款手游不是梦——性能优化、广告集成与内购设置全包含
【8月更文挑战第31天】本书详细介绍了如何在Unity中设置项目以适应移动设备,涵盖性能优化、集成广告及内购功能等关键步骤。通过具体示例和代码片段,指导读者完成iOS和Android应用的打包与发布,确保应用顺利上线并获得成功。无论是性能调整还是平台特定的操作,本书均提供了全面的解决方案。
53 0
|
8天前
|
JSON API 定位技术
探索iOS开发之旅:打造你的第一个天气应用
【8月更文挑战第31天】 在这篇文章中,我们将一起踏上iOS开发的冒险旅程,学习如何从零开始构建一个简单的天气应用。通过实际操作和代码示例,你将了解到如何在Xcode中设置项目、使用Swift语言编写代码、以及接入第三方API来获取实时天气数据。无论你是刚入门的新手还是想扩展知识的开发者,这篇文章都将为你提供有价值的指导和灵感。