首页 文章 精选 留言 我的

精选列表

搜索[桌面应用程序],共10005篇文章
优秀的个人博客,低调大师

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

在这里,主要为大家介绍一下,怎样从相册选取图片并在ImageView中显示出你选择的图片,并且实现简单的音乐和视频播放,下面是运行时的主页面效果图: 下面我们仔细学习具体的细节。创建一个空的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个选项,Push,Modal和Custom,选中Modal,再次运行,点击photo页面跳转成功。 这时点击导航栏上的camera,会在下方弹出一个UIActionSheet,选择从手机相册获取之后回呈现相册里的图片,根据需求选择完之后会在ImageView中显示出来相应的图片,具体效果图如下: 在项目中添加类文件photoViewController系统自动生成photoViewController.h(头文件)和photoViewController.m(实现文件),在photoViewController.m中从相册选取图片的主要程序如下: - (IBAction)btnPressed:(id)sender { UIActionSheet*actionSheet = [[UIActionSheetalloc] initWithTitle:nil delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@"打开照相机",@"从手机相册获取",nil]; [actionSheetshowInView:self.view]; } - (void)actionSheet:(UIActionSheet*)actionSheetclickedButtonAtIndex:(NSInteger)buttonIndex { if(buttonIndex == actionSheet.cancelButtonIndex) { NSLog(@"取消"); } switch(buttonIndex) { case0: //打开照相机拍照 [selftakePhoto]; break; case1: //打开本地相册 [selfLocalPhoto]; break; } } -(void)takePhoto { UIImagePickerController*picker=[[UIImagePickerControlleralloc]init]; picker.sourceType=UIImagePickerControllerSourceTypeCamera; picker.delegate=self; picker.allowsEditing=YES; [selfpresentModalViewController:pickeranimated:YES]; } -(void)LocalPhoto { UIImagePickerController*picker = [[UIImagePickerControlleralloc]init]; picker.sourceType=UIImagePickerControllerSourceTypePhotoLibrary; picker.delegate=self; //设置选择后的图片可被编辑 picker.allowsEditing=YES; [selfpresentModalViewController:pickeranimated:YES]; } //实现图像选取器控制器的委托 -(void)imagePickerController:(UIImagePickerController*)pickerdidFinishPickingMediaWithInfo:(NSDictionary*)info { //用UIImagePickerController选择、显示图片或视频 NSString*type = [infoobjectForKey:UIImagePickerControllerMediaType]; //当选择的类型是图片 if([typeisEqualToString:@"public.image"]) { //先把图片转成NSData UIImage* image = [infoobjectForKey:@"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 [fileManagercreateDirectoryAtPath: documentsPathwithIntermediateDirectories:YESattributes:nilerror:nil]; [fileManagercreateFileAtPath:[ documentsPathstringByAppendingString:@"/image.png"]contents:dataattributes:nil]; //得到选择后沙盒中图片的完整路径 filePath= [[NSStringalloc]initWithFormat:@"%@%@", documentsPath, @"/image.png"]; //关闭相册界面 [pickerdismissModalViewControllerAnimated:YES]; imageView.image= image; //加在视图中 [self.viewaddSubview:imageView]; } } 二.音乐的播放: 音乐由页面中的PickVideo按钮触发播放音频文件,iPhone开发中想要实现音频的播放是很容易的,AVFoundation框架就是Apple本身推荐使用的一种方式。如何引入这个框架,下面为大家详细介绍: 首先,点击工程文件夹,会出现左边的界面,选择我圈起来的那个加号,会出现一系列的框架给你选择,你只需要选择AVFoundation.framework即可。此时,在它的上方就会显示出来,这个框架就添加好了。 播放音乐所需要的程序如下: - (IBAction)playMp4File:(id)sender { // //找到mp3在资源库中的路径文件名称为sound类型为mp3 NSString*soundPath=[[NSBundlemainBundle]pathForResource:@"后来"ofType:@"mp3"]; if(soundPath) { NSURL*soundUrl=[[NSURLalloc]initFileURLWithPath:soundPath]; player=[[AVAudioPlayeralloc]initWithContentsOfURL:soundUrlerror: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框架。 下面是触发pivkVideo时的代码: - (IBAction)pickVideo:(id)sender { NSString*videoPath=[[NSBundlemainBundle]pathForResource:@"犯罪高手"ofType:@"mp4"]; NSLog(@"%@",videoPath); if(videoPath) { NSURL*videoUrl=[[NSURLalloc]initFileURLWithPath:videoPath]; //视频播放对象 moviePlayer= [[MPMoviePlayerControlleralloc] initWithContentURL:videoUrl]; //适应屏幕大小,保持宽高比 moviePlayer.controlStyle=MPMovieScalingModeAspectFit; [moviePlayer.viewsetFrame:self.view.bounds]; moviePlayer.initialPlaybackTime= -1; //显示播放/暂停、音量和时间控制 moviePlayer.movieControlMode=MPMovieControlModeDefault; [self.viewaddSubview:moviePlayer.view]; //注册一个播放结束的通知 [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(myMovieFinishedCallback:) name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer]; UIToolbar*toolBar=[[UIToolbaralloc]initWithFrame:CGRectMake(0, 0, 320, 44)]; UIButton*button=[[UIButtonalloc]initWithFrame:CGRectMake(20, 3, 40, 40)]; [buttonsetTitle:@"back"forState:UIControlStateNormal]; [buttonaddTarget:selfaction:@selector(backItem)forControlEvents:UIControlEventTouchUpInside]; [toolBaraddSubview:button]; [moviePlayer.viewaddSubview:toolBar]; [moviePlayerplay]; [moviePlayerstop]; } } -(void)myMovieFinishedCallback:(NSNotification*)notify { //视频播放对象 MPMoviePlayerController* theMovie = [notifyobject]; //销毁播放通知 [[NSNotificationCenterdefaultCenter]removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:theMovie]; [theMovie.viewremoveFromSuperview]; } 本文转自HDDevTeam 51CTO博客,原文链接:http://blog.51cto.com/hddev/1218425,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android应用程序(APK)的编译打包过程

(9878)(7) 现在很多人想对Android工程的编译和打包进行自动化,比如建立每日构建系统、自动生成发布文件等等。这些都需要我们对Android工程的编译和打包有一个深入的理解,至少要知道它的每一步都做了什么,需要什么环境和工具,输入和输出是什么。那么我们就来挖掘一下Android的编译过程中的细节。 首先,我们假定你的系统(什么系统都行,不限于Linux还是Windows系统,当然,我在这里默认使用Linux系统来举例子,但在 Windows中几乎没有什么差别)已经安装了JDK和Android SDK。再假定你的Android SDK的路径是ANDROID_SDK_HOME,你想要编译的Android OS版本是ANDROID_OS_VERSION(比如android-1.6、android-8、android-10等)。 我们重点关心的是(1)这个过程的输入是什么?(2)这个过程的输出是什么?(3)这个过程使用了什么工具?至于使用什么参数,可以自己去看对应命令的帮助文件,或者在网上搜索,这不是本文的重点。 步骤中提到的工具如下表: 名称 功能介绍 在操作系统中的路径 aapt Android资源打包工具 ${ANDROID_SDK_HOME}/platform-tools/appt aidl Android接口描述语言转化为.java文件的工具 ${ANDROID_SDK_HOME}/platform-tools/aidl javac Java Compiler ${JDK_HOME}/javac或/usr/bin/javac dex 转化.class文件为Davik VM能识别的.dex文件 ${ANDROID_SDK_HOME}/platform-tools/dx apkbuilder 生成apk包 ${ANDROID_SDK_HOME}/tools/opkbuilder jarsigner .jar文件的签名工具 ${JDK_HOME}/jarsigner或/usr/bin/jarsigner zipalign 字节码对齐工具 ${ANDROID_SDK_HOME}/tools/zipalign 第一步:打包资源文件,生成R.java文件 【输入】Resource文件(就是工程中res中的文件)、Assets文件(相当于另外一种资源,这种资源Android系统并不像对res中的文件那样优化它)、AndroidManifest.xml文件(包名就是从这里读取的,因为生成R.java文件需要包名)、Android基础类库(Android.jar文件) 【输出】打包好的资源(一般在Android工程的bin目录可以看到一个叫resources.ap_的文件就是它了)、R.java文件(在gen目录中,大家应该很熟悉了) 【工具】aapt工具,它的路径在${ANDROID_SDK_HOME}/platform-tools/aapt(如果你使用的是Windows系统,按惯例路径应该这样写:%ANDROID_SDK_HOME%\platform-tools\aapt.exe,下同)。 第二步:处理AIDL文件,生成对应的.java文件(当然,有很多工程没有用到AIDL,那这个过程就可以省了) 【输入】源码文件、aidl文件、framework.aidl文件 【输出】对应的.java文件 【工具】aidl工具 第三步:编译Java文件,生成对应的.class文件 【输入】源码文件(包括R.java和AIDL生成的.java文件)、库文件(.jar文件) 【输出】.class文件 【工具】javac工具 第四步:把.class文件转化成Davik VM支持的.dex文件 【输入】 .class文件(包括Aidl生成.class文件,R生成的.class文件,源文件生成的.class文件),库文件(.jar文件) 【输出】.dex文件 【工具】javac工具 第五步:打包生成未签名的.apk文件 【输入】打包后的资源文件、打包后类文件(.dex文件)、libs文件(包括.so文件,当然很多工程都没有这样的文件,如果你不使用C/C++开发的话) 【输出】未签名的.apk文件 【工具】apkbuilder工具 第六步:对未签名.apk文件进行签名 【输入】未签名的.apk文件 【输出】签名的.apk文件 【工具】jarsigner 第七步:对签名后的.apk文件进行对齐处理(不进行对齐处理是不能发布到Google Market的) 【输入】签名后的.apk文件 【输出】对齐后的.apk文件 【工具】zipalign工具 知道了这些细节之后,我们就可以实现很多我们想实现东西了,比如:自动化,我们可以使用某种脚本,像Windows下的批处理,linux下的Bash,Java下的Ant,Python、Perl这样的脚本语言,甚至直接用Java、.net这们的强类型语言也是可以的。如果你真正弄懂了上面的步骤,了解了编译打包过程的本质,你完全可以以你想要的任何方式实现它的自动化,这才是真正的“举一反三,以不变应万变”。再比如,对Android SDK的精简,大家知道,现在Android SDK动辙几百兆,我们完全可以应用上面的知识,只保留必要的工具,把SDK精简到10M以下。当然,还可以做很多事情,前提是你真正弄懂了它。 本文转自 一点点征服 博客园博客,原文链接:http://www.cnblogs.com/ldq2016/p/6117886.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

使用MonoDevelop开发跨平台的应用程序

Mono®项目在3月31日发布了Mono2.4和MonoDevelop 2.0版本,2009年6月3日Lluis 在博客上宣布了MonoDevelop是一个完全跨平台的IDE。Mono计划的主管Miguel de Icaza也在博客上介绍了MonoDevelop 2.2版本。 在 2003 年后期,部分Mono社区的开发者开始移植SharpDevelop到 Linux 上(SharpDevelop是个成功的 .NET 开发源代码的集成开发环境),将原本以 System.Windows.Forms 为基础的代码改为使用 GTK#。MonoDevelop 整合了很多Eclipse与Microsoft Visual Studio的特性,像智能提示版本控制, GUI 与Web 设计工具。另外还整合了GTK# GUI設計工具(叫做Stetic)。SharpDevelop IDE的创建者Mike Krueger 在2007年加入MonoDevelop IDE开发团队, 虽然现在SharpDevelop和MonoDevelop仍然在发展,他们的架构已经完全不一样了。 Miguel De Icaza在文章中主要谈到几个方面: Linux, MacOS 和Windows上的特性完全一样MonoDevelop 已经有了很多社区共献的插件,像Flash/Flex开发支持,Vala语言支持,Mono debugger,MonoDevelop在三个主要的平台的特性一样,开发一个MonoDevelop的插件就可以惠及更多的开发者和用户本地化的系统支持,虽然MonoDevelop是基于GTK#开发的,开发者期望尽可能的和他们所使用的系统集成在一起,比如说在Mac上的菜单使用的Mac的系统菜单在Windows平台上MonoDevelop使用的.NET Framework和.NET的调试器代替Mono的运行时和调试器,这样就不需要Mono安装在系统上,只需要安装一个GTK# for .NET 。 本文来自云栖社区合作伙伴“doNET跨平台”,了解相关信息可以关注“opendotnet”微信公众号

优秀的个人博客,低调大师

Enlightenment 0.27.0 发布,桌面管理器

在 Enlightenment 0.26 发布一年多之后,Enlightenment 0.27.0 最新版本现已发布,依赖于 EFL v1.28.0 或更新版本。 v0.27 修复了很多问题,并增加了一些新功能。但公告中并没有进一步详细说明: 强烈建议使用,以确保正常功能(当然也可以不使用): connman(用于网络配置支持) bluez5(用于蓝牙配置和控制) bc(用于一切模块的计算器模式) pulseaudio(用于正确控制和重定向音频设备) packagekit(用于内置系统更新监控和更新程序) udisks2(用于移动存储的挂载/卸载) ddcutil (特别是用于 backlight control 的 libddcutil.so.2) gdb(如果你想在 ~/.e-crashdump.txt 中自动回溯崩溃过程--别忘了使用 gdb 调试功能构建 EFL 和 E,以使其发挥作用) 通过 Git 浏览 Enlightenment 可发现,新版本带来了cpufreq 小程序的改进、X11 上 RandR 处理的修复、翻译的更新、电池小程序的改进、为减少 Proton/Steam 游戏 CPU 占用率做出了改进,以及其他一些小的改进。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册