我newbei,创造出这样的钢琴基于UI的应用程序。 我正在开发中,我不得不使用钢琴的应用程序。 如何在iPhone打造钢琴的用户界面? 如何使用Interface Builder创建? 或是否有任何其他的方法来创建钢琴吗?
我在迫切需要建立这样的UI,如果有任何身体有任何解决方案或任何有用的代码或任何链接,将不胜感激。
谢谢,Nirj
我newbei,创造出这样的钢琴基于UI的应用程序。 我正在开发中,我不得不使用钢琴的应用程序。 如何在iPhone打造钢琴的用户界面? 如何使用Interface Builder创建? 或是否有任何其他的方法来创建钢琴吗?
我在迫切需要建立这样的UI,如果有任何身体有任何解决方案或任何有用的代码或任何链接,将不胜感激。
谢谢,Nirj
版本1易于编码,不那么优雅。
在Xcode启动基于视图的项目,并使用Interface Builder,编辑MyProjectViewController.xib
,放在一起一系列的形状和颜色,类似于一个屏幕上的键盘按键。
编辑MyProjectViewController.h
和.m
添加一堆带有签名的方法:
- (IBAction) playMiddleC: (id) sender;
- (IBAction) playMiddleD: (id) sender;
- (IBAction) playMiddleE: (id) sender;
现在,你可以回到界面生成器,并用鼠标右键单击并拖动每个按钮(类型文件的所有者对象MyProjectViewController
)。 执行此操作时,弹出一个菜单询问哪种方法来连接按钮 - 选择该密钥的适当的方法。
现在添加一个声音文件为每个要播放的按键。 例如,假设你有一个名为midC.caf
(在,比方说,线性PCM格式编码,作为一个有效的声音文件格式 )。 该文件到您的项目目录,并通过右键单击您的资源文件夹添加到项目(在Xcode),并选择添加>现有文件..然后选择你的声音文件的副本。
接下来,您需要将AudioToolbox库添加作为一个依赖。 通过在框架文件夹中右击做到这一点,选择Add>现有框架..然后浏览的AudioToolbox库,并选择它。
与此同时,在MyProjectViewController.m
,添加如下代码:
#import <AudioToolbox/AudioServices.h>
// (Later...)
- (IBAction) playMiddleC: (id) sender {
NSString* path = [[NSBundle mainBundle]
pathForResource:@"midC" ofType:@"caf"];
NSURL* url = [NSURL URLWithString:path];
SystemSoundID midC;
AudioServicesCreateSystemSoundID((CFURLRef)url, &midC);
AudioServicesPlaySystemSound(midC);
}
命中命令 - 输入编译和运行,使一些音乐!
第2版稍有更优雅。
编程构建一个键盘UI与一个数组白键,另一个是黑色的(因为他们将有稍微不同的坐标)。 我建议使用自定义UIButton
类型和每个键类型的压制和nonpressed版本(黑色,C / F,B / E,和A / d / G,其是中间白键-我帐户键缩进这里)图像。
这将允许你存储指针这些按钮在数组中,并有可能播放声音的任何键,也通过存储声音ID在相应的阵列中的单个方法。
你可能会认为你想通过程序生成的声音,因为它们在性质上有所数学。 但AudioQueue
服务,你会用这样做,是显著更多的工作来处理比上面的代码,所以其实我建议只用声音字节,即使是在一个“优雅”的版本。 它甚至可能听起来这样更好,反正。
顺便说一句 ,你的问题使得它听起来像你想的这是一个quicky和很容易上手的应用程序,但我不那么肯定。 学习开发iPhone应用程序是有趣的,但需要一些严重的时间和精力去做好。 如果你有兴趣在启动应用程序的想法,我建议在寻找的东西,同时锻炼一个新的编程技能,比如学习与无处不在的工作UITableView
,或快速应用程序,让您拍摄照片并将其附加到电子邮件,例如(这是容易的,因为iPhone的SDK有拍照和电子邮件组成的大力支持)。
玩得开心!
感谢回复...
我几乎与发展中国家钢琴的UI做。
我已经使用编程方法创建黑白键。
CGFloat buttonWhitePosX = 2.0; //white button start position
for(int i=0;i<8;i++){ //8 keys in one octave
CGFloat buttonWhitePosY = 105;
CGFloat buttonWhiteWidth = 57;
CGFloat buttonWhiteHeight = 190;
UIButton *buttonWhite = [[UIButton alloc] initWithFrame:CGRectMake(buttonWhitePosX, buttonWhitePosY, buttonWhiteWidth, buttonWhiteHeight)];
buttonWhitePosX = buttonWhitePosX + WHITE_BUTTON_SPACE + buttonWhiteWidth;
[buttonWhite setBackgroundImage:whiteImage forState:UIControlStateNormal];
[buttonWhite addTarget:self action:@selector(pressButtonWhiteTouchDown:) forControlEvents:UIControlEventTouchDown];
buttonWhite.tag = i;
[buttonWhite setBackgroundImage:whiteImageHighlighed forState:UIControlEventTouchDragInside];
[self.view addSubview:buttonWhite];
[buttonWhite release];
}
使用不同的坐标黑键一样。
另外我能够播放声音的按键按下使用AVPlayer。(对选择触落)
到目前为止好,但是当用户滑过琴键,钢琴应该发挥尊重的声音。
为了实现这一目标是试图与
1)用于UIButton的UIControl事件。 dragEnter事件,拖累出口,拖累内。 但它不会给我按下哪个按钮准确,作为拖出口位置是绘制按钮以外的方式
2)所使用的touchesBegan,touchesEnded,主视图的touchesMoved(其中黑和白键被放置)。
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [[event allTouches] anyObject];
CGPoint touchLocation = [touch locationInView:touch.view];
currentView = [self.view hitTest:touchLocation withEvent:nil]; //get top view
if(currentView != self.view){ //check current view is main view, do nothing
if(currentView == prevView){ //check current view is prev view, keep highlight image
currentView.backgroundColor = [UIColor colorWithPatternImage:whiteImageHighlighed];
}else{ //view changed, change image and play sound
prevView.backgroundColor = [UIColor colorWithPatternImage:whiteImage];
currentView.backgroundColor = [UIColor colorWithPatternImage:whiteImageHighlighed];
[self pressButtonWhiteDown1:currentView.tag];
prevView = currentView;
}
}
}
在这种方法中它给当错误的观点上白键的用户幻灯片和遇到黑键的X位置(如黑键是在主视图白键的顶部):
替代文字http://img215.yfrog.com/img215/1720/pianohelp.png
是否有I / M做错了在任何其他方法或东西。 请指导我。
是否有可能得到触摸点的确切看法?
谢谢。
一种方法是采取钢琴键盘的图像(S)和使用的图像为出发点。
另一种方式是绘制键在Photoshop或其他应用程序,同时在默认和键的按压位置,并使用这些作为基础。
不要在App Store搜索,并期待在不同的方式钢琴的键盘已付诸实施。 有几个,有的看起来比其他人更逼真。
做一个钢琴键盘的良好表现是不是一件容易的事,特别是如果你试图拿到钥匙的光泽外观,并通过动画创作出逼真的运动,但它是可行的。 最起码,你应该学习石英2D ,可能还有一些CAAnimation。
我做了一些非常相似。 我用正常的按钮与圆角并取得他们每个人的发挥WAV声音。 它工作得很好!
你可以从这里得到的钢琴按键音: http://www.sonicspot.com/news/free-musical-instrument-samples.html 。 该文件是相当大的,你可以切断他们与胆略和出口为.wav