打造带音效和延迟反馈的趣味选择器游戏
立即解锁
发布时间: 2025-08-24 01:16:24 阅读量: 2 订阅数: 7 


iOS应用开发实战指南:从入门到精通
# 打造带音效和延迟反馈的趣味选择器游戏
## 1. 初步代码声明
首先,我们需要声明一些属性和方法,以下是代码:
```objc
@property(nonatomic, retain) IBOutlet UILabel *winLabel;
@property(nonatomic, retain) NSArray *column1;
@property(nonatomic, retain) NSArray *column2;
@property(nonatomic, retain) NSArray *column3;
@property(nonatomic, retain) NSArray *column4;
@property(nonatomic, retain) NSArray *column5;
- (IBAction)spin;
```
这里声明了两个输出口,一个用于选择器视图,另一个用于标签。标签用于告知用户何时获胜,当用户连续获得三个相同符号时获胜。同时创建了五个指向 `NSArray` 对象的指针,用于保存包含我们希望选择器绘制的图像的图像视图。此外,还声明了一个名为 `spin` 的动作方法。
## 2. 构建视图
构建视图的步骤如下:
1. 保存新的源代码,然后双击 `CustomPickerViewController.xib` 来编辑图形用户界面(GUI)。
2. 设置模拟用户界面元素以模拟视图底部的标签栏。
3. 添加一个选择器视图、一个标签和一个按钮,按钮标题设为 `Spin`。
4. 移动标签使其与视图的左引导线对齐,并触摸选择器视图底部下方的引导线。
5. 调整标签大小,使其延伸到右引导线,并向下延伸到按钮顶部上方的引导线。
6. 选择标签,打开属性检查器,将对齐方式设置为居中。
7. 点击文本颜色框更改文本颜色,设置为鲜艳的颜色,如亮紫红色。
8. 打开字体面板,将标签的字体大小更改为 48。
9. 删除标签中的 “Label” 文本,因为在用户首次获胜之前不希望显示任何文本。
10. 建立所有输出口和动作的连接:将 `File’s Owner` 的 `picker` 输出口连接到选择器视图,`winLabel` 输出口连接到标签,按钮的 `Touch Up Inside` 事件连接到 `spin` 动作。
11. 指定选择器的委托和数据源。
12. 选择选择器,打开属性检查器,取消选中 “User Interaction Enabled” 复选框,防止用户手动更改拨号盘作弊。
13. 保存对 `nib` 文件所做的更改。
## 3. 注意 iOS 设备支持的字体
在 Interface Builder 中设计 iOS 界面时使用字体面板要小心。Interface Builder 允许为标签分配 Mac 上的任何字体,但 iOS 设备支持的字体非常有限。应将字体选择限制为目标 iOS 设备上的字体家族之一。可以通过以下代码获取支持的字体列表:
```objc
for (NSString *family in [UIFont familyNames]) {
NSLog(@"%@", family);
for (NSString *font in [UIFont fontNamesForFamilyName:family]) {
NSLog(@"\t%@", font);
}
}
```
在适当的模拟器中运行项目,字体将显示在项目的控制台日志中。
## 4. 添加图像资源
将项目存档中 `07 Pickers/Custom Picker Images` 文件夹下的六个图像文件(`seven.png`, `bar.png`, `crown.png`, `cherry.png`, `lemon.png`, `apple.png`)添加到项目的 `Resources` 文件夹。提示复制时,最好将它们复制到项目文件夹中。
## 5. 实现控制器
在 `CustomPickerViewController.m` 文件开头添加以下代码:
```objc
#import "CustomPickerViewController.h"
@implementation CustomPickerViewController
@synthesize picker;
@synthesize winLabel;
@synthesize column1;
@synthesize column2;
@synthesize column3;
@synthesize column4;
@synthesize column5;
- (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 = @"";
}
- (void)viewDidLoad {
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++) {
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];
UIImageV
```
0
0
复制全文
相关推荐









