十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
如果你入门了iOS开发并且有一定的英文功底,我是非常推荐你去看的,尤其官方文档,应该经常翻阅。但是我认为保持学习的热情是最重要的。本着这个理念,我推荐的学习方法难度非常低,希望你们能满意。 第一阶段: RayWenderlich网站中的 The iOS Apprentice教程 这个教程截止目前已经不更新OC语言的版本了,但是如果你是抱着求职为目的的学习还是请看OC版本的(两年前的版本)。The iOS Apprentice的教程针对完全没有编程经验的人设计。这个教程是外国人写的并且有免费试读版,感兴趣的人要看看。里面说的东西都非常非常基本,里面一个共讲解了4个不同类型app,强烈建议一步一步按照上面所写的步骤敲一遍代码。其中你会遇到很多复杂的语句和长的可怕的函数,你不用感到恐慌,照着敲,知道它干嘛用完全OK了,随着你编程时间以及经验的增加,你都会懂得。。如果看完了这个免费的教程觉得还挺想继续学的请参王寒老师也做了swift版本的The iOS Apprentice教程翻译,自己去找)
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册、虚拟空间、营销软件、网站建设、阳信网站维护、网站推广。
第二阶段:培训班的网络课程及入门书籍 经过第一个阶段你应该已经大致掌握IOS开发流程,能编写一个非常简单的应用了。这时候相信你的热情应该会很高涨,但接下来的学习可能会很枯燥,做好准备
建议首先要恶补基础知识。经过第一个阶段你可能觉得你懂不少了,但是只是表面,尤其是没学过编程的应该好好学习一下视频前面的课程,主要看看语法。等你看恶心了看烦了就去看视频里UI部分,这里相对于来说比较轻松,一定要把视频里写的语句打一遍,相信这样你理解会更深刻。里面说的不清楚的地方上网可以百度,可以查书(如果你有书的话)。
用XCode创建一个新的iOS应用,模版选择“Empty Application”。取个工程名(我将要编写一个游戏引擎,所以我命名为"ExampleEngine"),保持默认选择(如果是编写一个库,那在类前最好有个前缀,我用的是“EE”),保存。
接着我们添加OpenGL与GLKit相关frameworks。点击左上角的工程,然后选中TARGETS下你的target,再选中Build Phases栏,在“Link Binary With Libraries”中加入GLKit, OpenGLES,QuartzCore这三个framework。完成后,你将会在工程中看到你加入的framework,当然你也可以用拖的方式将其拖入Frameworks分组下。
确保你选择的是模拟器(如果你有开发者帐号,你可以用合法的provisioning profile来真机调试,于是你可以选择device),按⌘B 确保可以正确编译。
在AppDelegate头文件里引入GLKit头文件,这样就可以调用GLKit中的方法。
// AppDelegate.h
#import UIKit/UIKit.h
#import GLKit/GLKit.h
...
GLKit了类化了UIView与UIViewController,利用它们将方便我们把OpenGL场景集成到我们的应用中。两个类都是用代理(苹果Objective-C库中一种非常通用的设计模式)的计设模式嵌入到我们的应用代码中。我们要用AppDelegate作为GLKit的代理,因此得告诉编译器AppDelegate会实现代理协议。
// AppDelegate.h
...
@interface AppDelegate : UIResponder UIApplicationDelegate,
GLKViewDelegate, GLKViewControllerDelegate
...
现在来创建场景。将application:didFinishLaunchingWithOptions:这个方法用下面代码替换:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
EAGLContext *context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
[EAGLContext setCurrentContext:context];
GLKView *view = [[GLKView alloc] initWithFrame:[[UIScreen mainScreen] bounds] context:context];
view.delegate = self;
GLKViewController *controller = [[GLKViewController alloc] init];
controller.delegate = self;
controller.view = view;
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = controller;
[self.window makeKeyAndVisible];
return YES;
}
第3,4行创建OpenGL绘制时需要的上下文。
第6,7行设置绘制场景的view。第6行,由OpenGL上下文创建屏幕大小的view。第7行指明view的代理为AppDelegate。这样绘制每一帧的时候就会调用glkview:drawInRect:这个方法。
第9-11行,创建GLKViewController,并指明其代理类与view。代理方法中我们主要关心 glkViewControllerUpdate:
第13-15行,将我们的controller与"window"关联,以便显示。
第17行通知OS我们的应用已启动完成。
现在代理方没还没实现所以有警告提示,但是也可以运行。运行后,你会看到纯色的背景,看一看吧!
现在我们把这些警告去掉交改背景为灰色。在theapplication:didFinishLaunchingWithOptions:方法下面实现如下代理方法:
- (void)glkViewControllerUpdate:(GLKViewController *)controller {
// NSLog(@"in glkViewControllerUpdate");
}
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {
// NSLog(@"in glkView:drawInRect:");
glClearColor(0.5, 0.5, 0.5, 0.5);
glClear(GL_COLOR_BUFFER_BIT);
}
现在再运行,你会看到灰色背景,由gl开头的API实现的。在OpenGL与GLKit中,颜色由四个分量组成,分别是红,绿,蓝与alpha(透明度),每一个分量取值范围是[0,1]。
如果你打开上面代码中的NSLog注释,你会在控制台看到如下打印。
这儿有两个方法,因为GLKit基于state与presentation的(类似于MVC的设计模式或HTML/CSS分开发设计)。State(动画,物理模拟,游戏逻辑)应在glkViewControllerUpdate:这回调中,而glkView:drawInRect应用来绘制场景的。
一、简单介绍
简单来说,音频可以分为2种
(1)音效
又称“短音频”,通常在程序中的播放时长为1~2秒
在应用程序中起到点缀效果,提升整体用户体验
(2)音乐
比如游戏中的“背景音乐”,一般播放时间较长
框架:播放音频需要用到AVFoundation.framework框架
二、音效的播放
1.获得音效文件的路径
复制代码 代码如下:
NSURL *url = [[NSBundle mainBundle] URLForResource:@"m_03.wav" withExtension:nil];
2.加载音效文件,得到对应的音效ID
复制代码 代码如下:
SystemSoundID soundID = 0;
AudioServicesCreateSystemSoundID((__bridge CFURLRef)(url), soundID);
3.播放音效
复制代码 代码如下:
AudioServicesPlaySystemSound(soundID);
注意:音效文件只需要加载1次
4.音效播放常见函数总结
加载音效文件
复制代码 代码如下:
AudioServicesCreateSystemSoundID(CFURLRef inFileURL, SystemSoundID *outSystemSoundID)
释放音效资源
复制代码 代码如下:
AudioServicesDisposeSystemSoundID(SystemSoundID inSystemSoundID)
播放音效
复制代码 代码如下:
AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID)
播放音效带点震动
复制代码 代码如下:
AudioServicesPlayAlertSound(SystemSoundID inSystemSoundID)
三、程序示例
先导入需要依赖的框架
导入需要播放的音效文件素材
说明:AVFoundation.framework框架中的东西转换为CF需要使用桥接。
代码示例:
复制代码 代码如下:
YYViewController.m文件
//
// YYViewController.m
// 14-音效播放
//
// Created by apple on 14-8-8.
// Copyright (c) 2014年 yangyong. All rights reserved.
//
#import "YYViewController.h"
#import
@interface YYViewController ()
@end
复制代码 代码如下:
@implementation YYViewController
- (void)viewDidLoad
{
[super viewDidLoad];
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
//1.获得音效文件的全路径
NSURL *url=[[NSBundle mainBundle]URLForResource:@"buyao.wav" withExtension:nil];
//2.加载音效文件,创建音效ID(SoundID,一个ID对应一个音效文件)
SystemSoundID soundID=0;
AudioServicesCreateSystemSoundID((__bridge CFURLRef)url, soundID);
//把需要销毁的音效文件的ID传递给它既可销毁
//AudioServicesDisposeSystemSoundID(soundID);
//3.播放音效文件
//下面的两个函数都可以用来播放音效文件,第一个函数伴随有震动效果
AudioServicesPlayAlertSound(soundID);
//AudioServicesPlaySystemSound(#systemsoundid)
}
@end
说明:点击屏幕可以播放音效文件。
音乐的播放
一、简单说明
音乐播放用到一个叫做AVAudioPlayer的`类,这个类可以用于播放手机本地的音乐文件。
注意:
(1)该类(AVAudioPlayer)只能用于播放本地音频。
(2)时间比较短的(称之为音效)使用AudioServicesCreateSystemSoundID来创建,而本地时间较长(称之为音乐)使用AVAudioPlayer类。
二、代码示例
AVAudioPlayer类依赖于AVFoundation框架,因此使用该类必须先导入AVFoundation框架,并包含其头文件(包含主头文件即可)。
导入必要的,需要播放的音频文件到项目中。
代码示例:
复制代码 代码如下:
//
// YYViewController.m
// 15-播放音乐
//
#import "YYViewController.h"
#import
@interface YYViewController ()
@end
复制代码 代码如下:
@implementation YYViewController
- (void)viewDidLoad
{
[super viewDidLoad];
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
//1.音频文件的url路径
NSURL *url=[[NSBundle mainBundle]URLForResource:@"235319.mp3" withExtension:Nil];
//2.创建播放器(注意:一个AVAudioPlayer只能播放一个url)
AVAudioPlayer *audioPlayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil];
//3.缓冲
[audioPlayer prepareToPlay];
//4.播放
[audioPlayer play];
}
@end
代码说明:运行程序,点击模拟器界面,却并没有能够播放音频文件,原因是代码中创建的AVAudioPlayer播放器是一个局部变量,应该调整为全局属性。
可将代码调整如下,即可播放音频:
复制代码 代码如下:
#import "YYViewController.h"
#import
@interface YYViewController ()
@property(nonatomic,strong)AVAudioPlayer *audioplayer;
@end
复制代码 代码如下:
@implementation YYViewController
- (void)viewDidLoad
{
[super viewDidLoad];
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
//1.音频文件的url路径
NSURL *url=[[NSBundle mainBundle]URLForResource:@"235319.mp3" withExtension:Nil];
//2.创建播放器(注意:一个AVAudioPlayer只能播放一个url)
self.audioplayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil];
//3.缓冲
[self.audioplayer prepareToPlay];
//4.播放
[self.audioplayer play];
}
@end
注意:一个AVAudioPlayer只能播放一个url,如果想要播放多个文件,那么就得创建多个播放器。
三、相关说明
新建一个项目,在storyboard中放三个按钮,分别用来控制音乐的播放、暂停和停止。
程序代码如下:
复制代码 代码如下:
#import "YYViewController.h"
#import
@interface YYViewController ()
@property(nonatomic,strong)AVAudioPlayer *player;
- (IBAction)play;
- (IBAction)pause;
- (IBAction)stop;
@end
@implementation YYViewController
- (void)viewDidLoad
{
[super viewDidLoad];
//1.音频文件的url路径
NSURL *url=[[NSBundle mainBundle]URLForResource:@"235319.mp3" withExtension:Nil];
//2.创建播放器(注意:一个AVAudioPlayer只能播放一个url)
self.player=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil];
//3.缓冲
[self.player prepareToPlay];
}
- (IBAction)play {
//开始播放/继续播放
[self.player play];
}
- (IBAction)pause {
//暂停
[self.player pause];
}
- (IBAction)stop {
//停止
//注意:如果点击了stop,那么一定要让播放器重新创建,否则会出现一些莫名其面的问题
[self.player stop];
}
@end
注意:如果点了“停止”,那么一定要播放器重新创建,不然的话会出现莫名其妙的问题。
点击了stop之后,播放器实际上就不能再继续使用了,如果还继续使用,那么后续的一些东西会无法控制。
推荐代码:
复制代码 代码如下:
#import "YYViewController.h"
#import
@interface YYViewController ()
@property(nonatomic,strong)AVAudioPlayer *player;
- (IBAction)play;
- (IBAction)pause;
- (IBAction)stop;
@end
复制代码 代码如下:
@implementation YYViewController
#pragma mark-懒加载
-(AVAudioPlayer *)player
{
if (_player==Nil) {
//1.音频文件的url路径
NSURL *url=[[NSBundle mainBundle]URLForResource:@"235319.mp3" withExtension:Nil];
//2.创建播放器(注意:一个AVAudioPlayer只能播放一个url)
self.player=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil];
//3.缓冲
[self.player prepareToPlay];
}
return _player;
}
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (IBAction)play {
//开始播放/继续播放
[self.player play];
}
- (IBAction)pause {
//暂停
[self.player pause];
}
- (IBAction)stop {
//停止
//注意:如果点击了stop,那么一定要让播放器重新创建,否则会出现一些莫名其面的问题
[self.player stop];
self.player=Nil;
}
@end
四、播放多个文件
点击,url,按住common建查看。
可以发现,这个url是只读的,因此只能通过initWithContentsOfUrl的方式进行设置,也就意味着一个播放器对象只能播放一个音频文件。
那么如何实现播放多个音频文件呢?
可以考虑封装一个播放音乐的工具类,下一篇文章将会介绍具体怎么实现。
如何制作一个简单的 iOS app?
如今,不少企业都想拥有属于自己企业或产品的手机APP,但其中最困扰企业主的问题就是:开发一款手机APP到底需要多少钱?
简单点来说,要视手机APP的需求及质量而言,价位一般在几千到十几万左右,更高端的价格更高。
今天,我们就来详细分析一下这个问题,请继续往下看吧。
一、APP开发款式分为固定款和定制款,两者的价格均不相同
固定款:是指直接套用已有的、现成的APP固定模板,报价是固定的,所需要的功能也是固定的,缺点就是客户拿不到源代码,也不能根据企业需求进行定制,由于源代码是封装的,如果企业以后想进行功能升级或系统维护的话,也不能够实现,只能重新开发一个新的软件。
固定款的APP开发时间短,约2~3日的时间即可完成,费用大约在几千到几万之间。
定制款:定制款是指APP的功能全部重新开发,过程比较繁琐,需要美工、策划、APP开发(前台/客户端/手机端)、后台程序员等工种协同完成,大型的、功能复杂的APP甚至需要数十人的团队。
由于APP的功能和设计都是定制的,因此价格会高些。定制款的开发时间与开发价格是成正比的,开发时间长,大约在两三个月甚至不定的周期里才能完成,而费用大概在几万甚至十几万左右。
因此,想要知道开发一款手机APP需要花费多少钱,企业主首先必须把APP的详细需求和功能告知APP开发公司,开发公司才能报出一个合理的价格。
二、手机APP平台不同,制作成本也不一样
现在市面上流行的手机APP制作平台主要有两种一般包括两种系统:安卓系统(Android)和苹果系统(IOS)。
一般来说,制作苹果系统的手机APP软件费用要比安卓平台的贵一些,因为苹果公司对苹果平台的封闭性和手机APP开发语言Objective-C的难度,都让APP开发者加大了苹果系统手机APP开发的难度。
三、APP制作成本包含参与人员的工资
通常情况下,开发一款APP需要产品经理、客户端工程师、后端工程师和UI设计师各一名,这已经是制作手机APP应用软件比较精简的配置了,所以这些参与人员的工资也是包含在APP制作成本当中的。这些工作人员的月薪加起来可能都会超过4、5万元。
四、APP开发公司的所在地
需要注意的是,同样实力的APP开发公司,在不同的城市也会导致APP的成本费用高一些
开发一个简单的apple app要多少钱?
根据2020年1月的最新数据,开发一个app大概需要几万到几百万不等。
互联网是个神奇的大网,大数据开发和软件定制也是一种模式,这里提供最详细的报价,如果你真的想做,可以来这里,这个手机的开始数字是一伍扒中间的是壹壹三三最后的是泗柒泗泗,按照顺序组合起来就可以找到,我想说的是,除非你想做或者了解这方面的内容,如果只是凑热闹的话,就不要来了。
开发一个安卓app软件,需要考虑因素很多。如果是一款功能简单不是很全面,客户几乎没有什么要求的APP,只需要让美工对前台ui页面进行一定程度的修改,最短一两天就能完成的,费用大致需要几千元。
而开发一个完整的安卓app,简单的需要几万左右,复杂的几十上百万,安卓难度不比IOS大,很多团队都可以承包。
扩展资料:
软件维护
1、安装App后没有用的安装包apk及时删除
手机和个人计算机有很大的相似之处,在维护方法方面很多是相通的。现在许多经过手机厂商改进过的ROM都十分贴心,一般安装完某个App后会提醒是否删除安装包,如果没有其他用途了就可以立即删除,如果手机没有此项功能,也可手动删除。
2、定期清理缓存
长期使用社交应用会产生非常多的缓存,而且应用自己不会删除,长时间会积累许多的缓存,占用存储空间且造成卡顿,因此,可以使用手机设置里的应用程序管理里的清除缓存功能删除。还可以使用有清理垃圾功能的系统维护App。也可以卸载后重装一次。
3、使用时及时关闭不用的程序
虽然安卓系统会在内存紧张时自动结束一些进程,但在实际的应用中,应该有未雨绸缪的意识,平时就随手在多任务切换界面结束当前用不到的App,释放手机当时的运行内存,不仅有利于手机高效的运转,也防止其后台软件运行时的流量白白流失。