pro-超级猜图
来源:互联网 发布:php idc销售管理系统 编辑:程序博客网 时间:2024/05/15 12:34
//// MJViewController.m// 01-超级猜图最终版//// Created by apple on 14-3-27.// Copyright (c) 2014年 itcast. All rights reserved.//// iPhone上显示程序的图标// AppStore上显示程序的图标// Spotlight上显示程序的图标#import "MJViewController.h"#import "MJQuestion.h"@interface MJViewController ()- (IBAction)tip;- (IBAction)bigImg;- (IBAction)help;- (IBAction)nextQuestion;- (IBAction)iconClick;@property (weak, nonatomic) IBOutlet UIButton *scoreBtn;/** 存放正确答案按钮的view */@property (weak, nonatomic) IBOutlet UIView *answerView;@property (weak, nonatomic) IBOutlet UIView *optionView;/** 序号 */@property (weak, nonatomic) IBOutlet UILabel *noLabel;/** 标题 */@property (weak, nonatomic) IBOutlet UILabel *titleLabel;/** 头像(图标) */@property (weak, nonatomic) IBOutlet UIButton *iconBtn;/** 下一题按钮 */@property (weak, nonatomic) IBOutlet UIButton *nextQuestionBtn;/** 遮盖 */@property (nonatomic, weak) UIButton *cover;/** 所有的题目 */@property (nonatomic, strong) NSArray *questions;/** 当前是第几题(当前题目的序号) */@property (nonatomic, assign) int index;@end@implementation MJViewController- (void)viewDidLoad{ [super viewDidLoad]; // 默认显示index=0对应的题目 self.index = -1; [self nextQuestion];}- (NSArray *)questions{ if (_questions == nil) { // 1.加载plist NSArray *dictArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"questions" ofType:@"plist"]]; // 2.字典转模型 NSMutableArray *questionArray = [NSMutableArray array]; for (NSDictionary *dict in dictArray) { MJQuestion *question = [MJQuestion questionWithDict:dict]; [questionArray addObject:question]; } // 3.赋值 _questions = questionArray; } return _questions;}/** * 添加分数 * * @param deltaScore 需要添加多少分 */- (void)addScore:(int)deltaScore{ int score = [self.scoreBtn titleForState:UIControlStateNormal].intValue; score += deltaScore; [self.scoreBtn setTitle:[NSString stringWithFormat:@"%d", score] forState:UIControlStateNormal];}/** * 提示 */- (IBAction)tip { // 1.点击所有的答案按钮 for (UIButton *answerBtn in self.answerView.subviews) { [self answerClick:answerBtn]; } // 2.取出答案 MJQuestion *question = self.questions[self.index]; // 答案的第一个文字 NSString *firstAnswer = [question.answer substringToIndex:1]; for (UIButton *optionBtn in self.optionView.subviews) { if ([optionBtn.currentTitle isEqualToString:firstAnswer]) { [self optionClick:optionBtn]; break; } } // 3.扣分 [self addScore:-1000];}/** * 控制状态栏的样式 */- (UIStatusBarStyle)preferredStatusBarStyle{
//状态栏详解<span style="white-space:pre">http://blog.csdn.net/pucker/article/details/12112105</span> // 白色 return UIStatusBarStyleLightContent;}/** * 下一题 */- (IBAction)nextQuestion { // 1.增加索引 self.index++; // 2.取出模型 MJQuestion *question = self.questions[self.index]; // 3.设置控件的数据 [self settingData:question]; // 4.添加正确答案 [self addAnswerBtn:question]; // 5.添加待选项 [self addOptionBtn:question];}/** * 设置控件的数据 */- (void)settingData:(MJQuestion *)question{ // 3.1.设置序号 self.noLabel.text = [NSString stringWithFormat:@"%d/%d", self.index + 1, self.questions.count]; // 3.2.设置标题 self.titleLabel.text = question.title; // 3.3.设置图片 [self.iconBtn setImage:[UIImage imageNamed:question.icon] forState:UIControlStateNormal]; // 3.4.设置下一题按钮的状态 self.nextQuestionBtn.enabled = self.index != (self.questions.count - 1);}/** * 添加待选项 */- (void)addOptionBtn:(MJQuestion *)question{ // 6.1.删掉之前的所有按钮 [self.optionView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];// for (UIView *subview in self.optionView.subviews) {// [subview removeFromSuperview];// } // 6.2.添加新的待选按钮 int count = question.options.count; for (int i = 0; i<count; i++) { // 6.2.1.创建按钮 UIButton *optionBtn = [[UIButton alloc] init]; // 6.2.2.设置背景 [optionBtn setBackgroundImage:[UIImage imageNamed:@"btn_option"] forState:UIControlStateNormal]; [optionBtn setBackgroundImage:[UIImage imageNamed:@"btn_option_highlighted"] forState:UIControlStateHighlighted]; // 6.2.3.设置frame // 按钮尺寸 CGFloat optionW = 35; CGFloat optionH = 35; // 按钮之间的间距 CGFloat margin = 10; // 控制器view的宽度 CGFloat viewW = self.view.frame.size.width; // 总列数 int totalColumns = 7; // 最左边的间距 = 0.5 * (控制器view的宽度 - 总列数 * 按钮宽度 - (总列数 - 1) * 按钮之间的间距) CGFloat leftMargin = (viewW - totalColumns * optionW - margin * (totalColumns - 1)) * 0.5; int col = i % totalColumns; // 按钮的x = 最左边的间距 + 列号 * (按钮宽度 + 按钮之间的间距) CGFloat optionX = leftMargin + col * (optionW + margin); int row = i / totalColumns; // 按钮的y = 行号 * (按钮高度 + 按钮之间的间距) CGFloat optionY = row * (optionH + margin); optionBtn.frame = CGRectMake(optionX, optionY, optionW, optionH); // 6.2.4.设置文字 [optionBtn setTitle:question.options[i] forState:UIControlStateNormal]; [optionBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; // 6.2.5.添加 [self.optionView addSubview:optionBtn]; // 6.2.6.监听点击 [optionBtn addTarget:self action:@selector(optionClick:) forControlEvents:UIControlEventTouchUpInside]; }}/** * 监听待选按钮的点击 */- (void)optionClick:(UIButton *)optionBtn{ // 1.让被点击的待选按钮消失 optionBtn.hidden = YES; // 2.显示文字到正确答案上 for (UIButton *answerBtn in self.answerView.subviews) { // 判断按钮是否有文字 NSString *answerTitle = [answerBtn titleForState:UIControlStateNormal]; if (answerTitle.length == 0) { // 没有文字 // 设置答案按钮的 文字 为 被点击待选按钮的文字 NSString *optionTitle = [optionBtn titleForState:UIControlStateNormal]; [answerBtn setTitle:optionTitle forState:UIControlStateNormal]; break; // 停止遍历 } } // 3.检测答案是否填满 BOOL full = YES; NSMutableString *tempAnswerTitle = [NSMutableString string]; for (UIButton *answerBtn in self.answerView.subviews) { // 判断按钮是否有文字 NSString *answerTitle = [answerBtn titleForState:UIControlStateNormal]; if (answerTitle.length == 0) { // 没有文字(按钮没有填满) full = NO; } // 拼接按钮文字 if(answerTitle) { [tempAnswerTitle appendString:answerTitle]; } } // 4.答案满了 if (full) { MJQuestion *question = self.questions[self.index]; if ([tempAnswerTitle isEqualToString:question.answer]) { // 答对了(文字显示蓝色) for (UIButton *answerBtn in self.answerView.subviews) { [answerBtn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal]; } // 加分 [self addScore:800]; // 0.5秒后跳到下一题 [self performSelector:@selector(nextQuestion) withObject:nil afterDelay:0.5]; } else { // 答错了(文字显示红色) for (UIButton *answerBtn in self.answerView.subviews) { [answerBtn setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; } } }}/** * 添加正确答案 */- (void)addAnswerBtn:(MJQuestion *)question{ // 5.1.删除之前的所有按钮 // 让数组中的所有对象都执行removeFromSuperview方法 [self.answerView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];// for (UIView *subview in self.answerView.subviews) {// [subview removeFromSuperview];// } // 5.2.添加新的答案按钮 int length = question.answer.length; for (int i = 0; i<length; i++) { // 5.2.1.创建按钮 UIButton *answerBtn = [[UIButton alloc] init]; [answerBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; // 5.2.2.设置背景 [answerBtn setBackgroundImage:[UIImage imageNamed:@"btn_answer"] forState:UIControlStateNormal]; [answerBtn setBackgroundImage:[UIImage imageNamed:@"btn_answer_highlighted"] forState:UIControlStateHighlighted]; // 5.2.3.设置frame CGFloat viewW = self.view.frame.size.width; // 按钮之间的间距 CGFloat margin = 10; // 按钮的尺寸 CGFloat answerW = 35; CGFloat answerH = 35; // 最左边的间距 = 0.5 * (控制器view的宽度 - 按钮个数 * 按钮宽度 - (按钮个数 - 1) * 按钮之间的间距) CGFloat leftMargin = (viewW - length * answerW - margin * (length - 1)) * 0.5; // 按钮的x = 最左边的间距 + i * (按钮宽度 + 按钮之间的间距) CGFloat answerX = leftMargin + i * (answerW + margin); answerBtn.frame = CGRectMake(answerX, 0, answerW, answerH); // 5.2.4.添加 [self.answerView addSubview:answerBtn]; // 5.2.5.监听点击 [answerBtn addTarget:self action:@selector(answerClick:) forControlEvents:UIControlEventTouchUpInside]; }}/** * 监听答案按钮的点击 */- (void)answerClick:(UIButton *)answerBtn{ // 1.让答案按钮文字对应的待选按钮显示出来(hidden = NO) for (UIButton *optionBtn in self.optionView.subviews) { if ([optionBtn.currentTitle isEqualToString:answerBtn.currentTitle] && optionBtn.hidden == YES) { // 发现跟答案按钮相同文字的待选按钮 optionBtn.hidden = NO; break; } } // 2.让被点击答案按钮的文字消失(去除文字) [answerBtn setTitle:nil forState:UIControlStateNormal]; // 3.让所有的答案按钮变为黑色 for (UIButton *answerBtn in self.answerView.subviews) { [answerBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; }}/** * 点击头像 */- (IBAction)iconClick { if (self.cover == nil) { // 没有遮盖,要放大 [self bigImg]; } else { // 有遮盖,要缩小 [self smallImg]; }}/** * 大图 */- (IBAction)bigImg { // 1.添加阴影 UIButton *cover = [[UIButton alloc] init]; cover.frame = self.view.bounds; cover.backgroundColor = [UIColor blackColor]; cover.alpha = 0.0; [cover addTarget:self action:@selector(smallImg) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:cover]; self.cover = cover; // 2.更换阴影和头像的位置 [self.view bringSubviewToFront:self.iconBtn]; // 3.执行动画 [UIView animateWithDuration:0.25 animations:^{ // 3.1.阴影慢慢显示出来 cover.alpha = 0.7; // 3.2.头像慢慢变大,慢慢移动到屏幕的中间 CGFloat iconW = self.view.frame.size.width; CGFloat iconH = iconW; CGFloat iconY = (self.view.frame.size.height - iconH) * 0.5; self.iconBtn.frame = CGRectMake(0, iconY, iconW, iconH); }];}/** * 小图 */- (void)smallImg{ // 执行动画 [UIView animateWithDuration:0.25 animations:^{ // 存放需要执行动画的代码 // 1.头像慢慢变为原来的位置和尺寸 self.iconBtn.frame = CGRectMake(85, 80, 150, 150); // 2.阴影慢慢消失 self.cover.alpha = 0.0; } completion:^(BOOL finished) { // 动画执行完毕后会自动调用这个block内部的代码 // 3.动画执行完毕后,移除遮盖(从内存中移除) [self.cover removeFromSuperview]; self.cover = nil; }];}/** * 帮助 */- (IBAction)help { }@end
0 0
- pro-超级猜图
- Pro/E超级技巧
- Pro/E超级技巧
- 超级猜图
- 超级猜图
- 超级猜图
- day04-超级猜图
- 0815-超级猜图(笔记)
- 超级授权专业版 SuperSU Pro v2.68 简体中文版
- [iOS开发项目-7] 超级猜图
- IOS开发笔记28-超级猜图
- iOS学习之路-超级猜图
- 应用:超级猜图(需求分析)
- Pro
- PRO
- pro
- pro
- pro
- Unity之EditorGUILayout-枚举
- ActionBar入门(1)
- Linux kernel source git repositories
- Delphi中DLL的创建和使用
- Linq 中 Distinct 的运用
- pro-超级猜图
- android slidingmenu demo 调试
- linux权限详解 .
- 汉诺塔递归实现
- Hex、bin、axf、elf格式文件小结
- 通达OA 一用户登陆精灵却不能用即时通讯功能的异常情况处理(图文)
- Linux——中断处理
- boost::asio译文
- python对mysql的一些操作(drop,create,insert)