首先看頭文件和前面的基本相似。
#import <UIKit/UIKit.h>
@interface BIDCustomPickerViewController : UIViewController
<UIPickerViewDelegate,UIPickerViewDataSource>
@property (strong,nonatomic) IBOutlet UIPickerView *picker;
@property (strong,nonatomic) IBOutlet UILabel *winlabel;
@property (strong,nonatomic) NSArray *column1;
@property (strong,nonatomic) NSArray *column2;
@property (strong,nonatomic) NSArray *column3;
@property (strong,nonatomic) NSArray *column4;
@property (strong,nonatomic) NSArray *column5;
-(IBAction)spin;
@end
添加圖像資源將打包好的圖片文件夾拖入到文件中就OK。
接下來就是實現控制器了
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
//載入6個不同的圖像
UIImage *seven=[UIImage imageNamed:@"seven.png"];
UIImage *bar=[UIImage imageNamed:@"bar.png"];
UIImage *crown=[UIImage imageNamed:@"crown.png"];
UIImage *cherry=[UIImage imageNamed:@"cherry.png"];
UIImage *lemon=[UIImage imageNamed:@"lemon.png"];
UIImage *apple=[UIImage imageNamed:@"apple.png"];
for(int i=1;i<=5;i++)
{
//每個選取器組件都創建5個圖像
UIImageView *sevenView=[[UIImageView alloc] initWithImage:seven];
UIImageView *barView=[[UIImageView alloc] initWithImage:bar];
UIImageView *crownView=[[UIImageView alloc] initWithImage:crown];
UIImageView *cherryView=[[UIImageView alloc] initWithImage:cherry];
UIImageView *lemonView=[[UIImageView alloc] initWithImage:lemon];
UIImageView *appleView=[[UIImageView alloc] initWithImage:apple];
//將視圖放到數組中。
NSArray *imageViewArray=[[NSArray alloc] initWithObjects:sevenView,barView,crownView,cherryView,lemonView,appleView, nil];
NSString *filedName=[[NSString alloc] initWithFormat:@"column%d",i];
//根據屬性名稱設置屬性
[self setValue:imageViewArray forKey:filedName];
}
//隨機數生成器
srandom(time(NULL));
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
self.picker=nil;
self.winlabel=nil;
self.column1=nil;
self.column2=nil;
self.column3=nil;
self.column4=nil;
self.column5=nil;
}
-(IBAction)spin
{
BOOL win=NO;
int numInRow=1;
int lastVal=-1;
for(int i=0;i<5;i++)
{
//隨即生成行選擇
int newValue=random()%[self.column1 count];
if (newValue==lastVal) {
numInRow++;
}
else
numInRow=1;
lastVal=newValue;
//該組件製作更改動畫,並告訴選取器重新載入該組件。
[picker selectRow:newValue inComponent:i animated:YES];
[picker reloadComponent:i];
if (numInRow==3) {
win=YES;
}
}
if (win) {
winlabel.text=@"Win";
}
else
winlabel.text=@"";
}
#pragma mark
#pragma mark Picker Data Source Methods
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 5;
}
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return [self.column1 count];
}
#pragma mark Picker Delegate Methods
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
NSString *arrayName=[[NSString alloc] initWithFormat:@"column%d",component+1];
NSArray *array=[self valueForKey:arrayName];
return [array objectAtIndex:row];
}
這樣基本的一個老虎機就完成了
我們繼續完善添加聲音和如何添加內部的一些框架(也就是類了,相當於dll之類的)
//顯示按鈕
-(void)showButton {
self.button.hidden = NO;
}
//當用戶獲勝時調用聲音及顯示文本框
-(void)playWinSound {
NSString *path = [[NSBundle mainBundle] pathForResource:@"win"
ofType:@"wav"];
SystemSoundID soundID;
AudioServicesCreateSystemSoundID(
(__bridge CFURLRef)[NSURL fileURLWithPath:path], &soundID);
AudioServicesPlaySystemSound (soundID);
winlabel.text = @"WIN!";
[self performSelector:@selector(showButton) withObject:nil
afterDelay:1.5];
}
修改後的操作方法- (IBAction)spin {
BOOL win = NO;
int numInRow = 1;
int lastVal = -1;
for (int i = 0; i < 5; i++) {
int newValue = random() % [self.column1 count];
if (newValue == lastVal)
numInRow++;
else
numInRow = 1;
lastVal = newValue;
[picker1 selectRow:newValue inComponent:i animated:YES];
[picker1 reloadComponent:i];
if (numInRow >= 3)
win = YES;
}
self.button.hidden = YES;//隱藏按鈕
//用於播放已加載的聲音
NSString *path = [[NSBundle mainBundle] pathForResource:@"crunch"
ofType:@"wav"];
SystemSoundID soundID;
AudioServicesCreateSystemSoundID(
(__bridge CFURLRef)[NSURL fileURLWithPath:path], &soundID);
AudioServicesPlaySystemSound (soundID);
if (win)
[self performSelector:@selector(playWinSound)
withObject:nil
afterDelay:.5];
else
[self performSelector:@selector(showButton)
withObject:nil
afterDelay:.5];
winlabel.text = @"";
}
添加AudioToolBox.framework
首先點擊圖片左邊上方的PIcker--找到dock中的TARGETS 的Picker --BuildPhases ---Link Binary With Libraries----點擊+。
找到AudioToolBox.framework這樣就把這個添加到Picker項目中,音樂也就會響起~~~~~~