iOS实现(超级猜图)源码
//首先建立模型文件
QLLQuestion.hheQLLQuestion.m文件 #import <Foundation/Foundation.h> @interface QLLQuestion : NSObject
@property(nonatomic,copy)NSString *answer;
@property(nonatomic,copy)NSString *icon;
@property(nonatomic,copy)NSString *title;
@property(nonatomic,strong)NSArray *options;
-(instancetype)initWithDict:(NSDictionary *)dict;
+(instancetype)QuestionWithDict:(NSDictionary *)dict;
@end #import "QLLQuestion.h" @implementation QLLQuestion
- (instancetype)initWithDict:(NSDictionary *)dict
{
self = [super init];
if (self) {
self.answer=dict[@"answer"];
self.icon=dict[@"icon"];
self.title=dict[@"title"];
self.options=dict[@"options"];
}
return self;
} +(instancetype)QuestionWithDict:(NSDictionary *)dict{
return [[self alloc] initWithDict:dict]; }
@end //
// ViewController.m
// 01-超级猜图
//
// #import "ViewController.h"
#import "QLLQuestion.h"
@interface ViewController ()
- (IBAction)tip;
- (IBAction)help;
- (IBAction)bigImg;
- (IBAction)nextQuestion;
- (IBAction)iconClick;
/**
* 待选项视图
*/
@property (weak, nonatomic) IBOutlet UIView *opintionView;
/**
* 答案项视图
*/
@property (weak, nonatomic) IBOutlet UIView *answerView;
/**
* 模型类
*/
@property(nonatomic,strong)NSArray *question;
/**
* 初始化序号
*/
@property(nonatomic,assign)int index;
/**
* 序号label
*/
@property (weak, nonatomic) IBOutlet UILabel *numLabel;
/**
* 标题
*/
@property (weak, nonatomic) IBOutlet UILabel *titleLabel;
/**
* 图片按钮
*/
@property (weak, nonatomic) IBOutlet UIButton *imageBtn;
/**
* 下一题按钮
*/
@property (weak, nonatomic) IBOutlet UIButton *nextBtn;
/**
* 阴影按钮
*/
@property (weak, nonatomic) IBOutlet UIButton *cover;
/**
* 分数按钮
*/
@property (weak, nonatomic) IBOutlet UIButton *scoreBtn;
@end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
//初始化index
self.index=-;
[self nextQuestion];
}
/**
* 延时加载
*/
-(NSArray *)question{
if (_question==nil) {
//引入plist文件
NSArray *dicArray=[NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"questions" ofType:@"plist"]];
NSMutableArray *questonsAray=[NSMutableArray array];
//取出模型
for (NSDictionary *dict in dicArray) {
QLLQuestion *quenstions=[[QLLQuestion alloc]initWithDict:dict];
[questonsAray addObject:quenstions];
}
//赋值
_question=questonsAray;
}
return _question;
}
-(UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent; }
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/**
* 下一题
*/
- (IBAction)nextQuestion {
//增加索引
self.index++; //取出模型
QLLQuestion *quenstion=self.question[self.index];
// NSLog(@"%d",self.index);
//设置数据
[self settingDateWithQuenstion:quenstion];
//设置答案项
[self addAnswerBtn:quenstion];
//设置待选项
[self addOpinionBtn:quenstion];
}
/**
* 设置数据
*/
-(void)settingDateWithQuenstion:(QLLQuestion *)quenstion{
self.numLabel.text=[NSString stringWithFormat:@"%d/%lu",self.index+,self.question.count];
self.titleLabel.text=quenstion.title;
[self.imageBtn setImage:[UIImage imageNamed:quenstion.icon] forState:UIControlStateNormal];
//设置下一个按钮的状态
self.nextBtn.enabled=(self.index!=self.question.count-);
}
/**
* 设置答案项
*/
-(void)addAnswerBtn:(QLLQuestion *)quenstion{ //删除之前的所有按钮
// for (UIView *subView in self.answerView.subviews) {
// [subView removeFromSuperview];
// }
[self.answerView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
//设置答案按钮
NSInteger length=quenstion.answer.length;
for (int i=; i<length; i++) {
UIButton *answerBtn=[[UIButton alloc]init];
[self.answerView addSubview:answerBtn];
//设置背景
[answerBtn setBackgroundImage:[UIImage imageNamed:@"btn_answer"] forState:UIControlStateNormal];
[answerBtn setBackgroundImage:[UIImage imageNamed:@"btn_answer_highlighted"] forState:UIControlStateHighlighted];
[answerBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
//设置frame
CGFloat margin=;
CGFloat answerW=;
CGFloat answerH=;
CGFloat viewW=self.view.frame.size.width;
CGFloat leftMargin=(viewW-length*answerW-(length-)*margin)*0.5;
CGFloat answerX=leftMargin+i*(answerW+margin);
answerBtn.frame=CGRectMake(answerX, , answerW, answerH);
//监听答案按钮的点击
[answerBtn addTarget:self action:@selector(answerClick:) forControlEvents:UIControlEventTouchUpInside];
[self.answerView addSubview:answerBtn];
} }
/**
* 监听答案按钮的点击
*/
-(void)answerClick:(UIButton *)answerBtn{
//答案按钮的文字
// NSString *answerTitle=[answerBtn titleForState:UIControlStateNormal];
NSString *answerTitle=answerBtn.currentTitle; //让答案按钮对应的待选项的文字显示出来
for (UIButton *optionBtn in self.opintionView.subviews) {
//待选项的文字
NSString *optionTitle=[optionBtn titleForState:UIControlStateNormal]; if ([optionTitle isEqualToString:answerTitle] && optionBtn.hidden==YES) {
optionBtn.hidden=NO;
break;
}
}
// NSLog(@"%d",self.index); //让被点击的答案按钮文字消失
[answerBtn setTitle:nil forState:UIControlStateNormal];
//让所有的答案按钮变为黑色
for (UIButton *answerBtn in self.answerView.subviews) {
[answerBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
}
}
/**
* 设置带选项
*/
-(void)addOpinionBtn:(QLLQuestion *)quenstion{
//设置待选项
//删除之前的按钮
//让数组中所有的对象都调用removeFromSuperview
[self.opintionView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
// for (UIView *subview in self.opintionView.subviews) {
// [subview removeFromSuperview];
// } NSInteger count=quenstion.options.count;
for (int i=; i<count; i++) {
//设置待选项的背景
UIButton *optionBtn=[[UIButton alloc]init];
[optionBtn setBackgroundImage:[UIImage imageNamed:@"btn_option"] forState:UIControlStateNormal];
[optionBtn setBackgroundImage:[UIImage imageNamed:@"btn_option_highlighted"] forState:UIControlStateHighlighted];
//设置文字
[optionBtn setTitle:quenstion.options[i] forState:UIControlStateNormal];
[optionBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
optionBtn.titleLabel.font=[UIFont systemFontOfSize:];
NSInteger totalColumns=;
//设置frame
CGFloat margin=;
NSInteger row=i/totalColumns;
NSInteger col=i%totalColumns;
CGFloat optionW=;
CGFloat optionH=;
CGFloat viewW=self.view.frame.size.width;
CGFloat optionLeftMargin=(viewW-totalColumns*optionW-(totalColumns-)*margin)*0.5;
CGFloat optionX=optionLeftMargin + col*(optionW+margin);
CGFloat optionY=row*(optionH+margin);
optionBtn.frame=CGRectMake(optionX,optionY , optionW, optionH);
//监听待选按钮的点击
[optionBtn addTarget:self action:@selector(optionClick:) forControlEvents:UIControlEventTouchUpInside];
[self.opintionView addSubview:optionBtn];
} }
/**
* 监听待选按钮的点击
*/
-(void)optionClick:(UIButton *)optionBtn{
//让待选按钮消失
optionBtn.hidden=YES;
//显示文字到正确答案上
for (UIButton *answerBtn in self.answerView.subviews) {
//判断按钮是否有文字
NSString *ansTitle= [answerBtn titleForState:UIControlStateNormal];
if(ansTitle.length==){ //没有文字
//设置答案按钮的文字为被点击待选按钮的文字
NSString *optionTitle= [optionBtn titleForState:UIControlStateNormal]; [answerBtn setTitle:optionTitle forState:UIControlStateNormal];
break;
}
}
//判断答案是否填满
BOOL full=YES;
NSMutableString *tempAnswerTitle=[NSMutableString string];
for (UIButton *answerBtn in self.answerView.subviews) {
//判断按钮是否有文字
NSString *ansTitle= [answerBtn titleForState:UIControlStateNormal];
if(ansTitle.length==){ //没有文字
full=NO;
}
//拼接文字
if (ansTitle) {
[tempAnswerTitle appendString:ansTitle];
}
}
//答案满 了
if (full) {
QLLQuestion *quenstion=self.question[self.index];
if ([tempAnswerTitle isEqualToString:quenstion.answer]) { //答对了,文字蓝色
for (UIButton *answerBtn in self.answerView.subviews) {
[answerBtn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
}
//加分
[self scoreDelta:];
//跳到下一题
[self performSelector:@selector(nextQuestion) withObject:nil afterDelay:0.25]; }else{
for (UIButton *answerBtn in self.answerView.subviews) {
[answerBtn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
}
}
}
}
/**
* 点击图片变大和变小
*/
- (IBAction)iconClick {
if (self.cover==nil) {//要放大
[self bigImg];
}else{
[self smallImg];
}
}
/**
* 提示
*/
- (IBAction)tip {
//点击所有的答案按钮
for (UIButton *answerBtn in self.answerView.subviews) {
[self answerClick:answerBtn];
} //取出答案
QLLQuestion *quenstions=self.question[self.index];
//
NSString *firstAnswer= [quenstions.answer substringToIndex:];
for (UIButton *optionBtn in self.opintionView.subviews) {
if ([optionBtn.currentTitle isEqualToString:firstAnswer]) {
[self optionClick:optionBtn];
break;
}
}
// 扣分
[self scoreDelta:-];
}
/**
* 帮助
*/
- (IBAction)help {
}
-(void)scoreDelta:(int)delta{
int score=self.scoreBtn.currentTitle.intValue;
score+=delta;
[self.scoreBtn setTitle:[NSString stringWithFormat:@"%d",score] forState:UIControlStateNormal];
}
/**
* 大图
*/
- (IBAction)bigImg {
//添加阴影
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;
//开始动画
//更换阴影和头像的位置
//
// [UIView beginAnimations:nil context:nil];
// [UIView setAnimationDuration:1.0];
[UIView animateWithDuration:0.5 animations:^{
[self.view bringSubviewToFront:self.imageBtn];
CGFloat iconW=self.view.frame.size.width;
CGFloat iconH=iconW;
CGFloat iconX=;
CGFloat iconY=(self.view.frame.size.height-iconH)*0.5;
self.imageBtn.frame=CGRectMake(iconX, iconY, iconW, iconH);
cover.alpha=0.7;
}];
// [UIView commitAnimations];
}
/**
* 小图
*/
-(void)smallImg{
//动画的block
[UIView animateWithDuration:0.5 animations:^{
self.imageBtn.frame=CGRectMake(, , , );
self.cover.alpha=0.0;
} completion:^(BOOL finished) {
[self.cover removeFromSuperview];
self.cover=nil;
}];
//删除阴影
// [self.cover removeFromSuperview];
// self.cover=nil;;
//缩小图片
// [UIView beginAnimations:nil context:nil];
// [UIView setAnimationDuration:1.0];
// [UIView setAnimationDelegate:self];
// [UIView setAnimationDidStopSelector:@selector(removeCover)];
// self.imageBtn.frame=CGRectMake(97, 160, 220, 220);
//
//
// self.cover.alpha=0.0; // [UIView commitAnimations];
}
//
//-(void)removeCover{
// [self.cover removeFromSuperview];
// self.cover=nil;
//}
@end

iOS实现(超级猜图)源码的更多相关文章
- iOS高仿app源码:纯代码打造高仿优质《内涵段子》
iOS高仿app源码:纯代码打造高仿优质<内涵段子>收藏下来 字数1950 阅读4999 评论173 喜欢133 Github 地址 https://github.com/Charlesy ...
- 比较不错的一个ios找茬游戏源码
找茬游戏源码 ,这个是一款非常不错的ios找茬游戏源码,该游戏的兼容性非常好的,并且还可以支持ipad和iphone,UI界面设计得也很漂亮,游戏源码真的是一款非常完美,而且又很完整的一款休闲类的游戏 ...
- ios水果风暴游戏源码下载
游戏源码是从那个IOS教程网IOS.662p.com分享给大家的. 这是一款ios水果风暴游戏源码下载,介绍给大家一下,喜欢的朋友可以下载学习一下吧.应用介绍:这是一个以获得高分和挑战更高难度为目的的 ...
- ios水果风暴游戏源码项目下载
这是一款ios水果风暴游戏源码下载,介绍给大家一下,喜欢的朋友可以下载学习一下吧.应用介绍:这是一个以获得高分和挑战更高难度为目的的游戏.游戏中有九种不同的卡通水果,您可以交换屏幕中两个相邻水果的位置 ...
- 仿陌陌的ios客户端+服务端源码项目
软件功能:模仿陌陌客户端,功能很相似,注册.登陆.上传照片.浏览照片.浏览查找附近会员.关注.取消关注.聊天.语音和文字聊天,还有拼车和搭车的功能,支持微博分享和查找好友. 后台是php+mysql, ...
- iOS开发之Alamofire源码解析前奏--NSURLSession全家桶
今天博客的主题不是Alamofire, 而是iOS网络编程中经常使用的NSURLSession.如果你想看权威的NSURLSession的东西,那么就得去苹果官方的开发中心去看了,虽然是英文的,但是结 ...
- iOS版打地鼠游戏源码
打地鼠游戏源码,游戏是一款多关卡基于cocos2d的iPad打地鼠游戏源码,这也是一款高质量的打地鼠游戏源码,可以拥有逐步上升的关卡的设置,大家可以在关卡时设置一些商业化的模式来盈利的,非常完美的一款 ...
- 较好的IOS新闻客户端应用源码
兼容性较好的新闻客户端应用源码,这个是一款国外新闻客户端源码,并且这款应用兼容性非常好的,可以很好地兼容iPhone和iPad的使用,而且应用的功能很多,新闻列表,上啦下拉刷新效果,评论列表,在线评论 ...
- ios球体弹跳游戏源码
一款耐玩的ios游戏源码,画面上有很多小星星,球体落下的时候,你需要在画面上画出一条条的线条让球体弹跳起来然后吃掉小星星,如果没借助球体就失败了.游戏有很多关卡.注意: <ignore_js_o ...
随机推荐
- overflow:hidden的另一层含义
overflow:hidden这个CSS样式是大家常用到的CSS样式,但是大多数人对这个样式的理解仅仅局限于隐藏溢出,而对于清除浮动这个含义不是 很了解.一提到清除浮动,我们就会想到另外一个CSS样式 ...
- [转载]SharePoint 2013搜索爬外网配置
本文介绍SharePoint 2013 设置外网(Internet)爬网源: 下面是步聚: 1. 新建外部爬网源 a. 打开 “SharePoint 2013 Central Administrati ...
- TogetherJS – 酷!在网站中添加在线实时协作功能
TogetherJS是一个免费.开源的 JavaScript 库,来自 Mozilla 实验室,可以实现基于 Web 的在线协作功能.把 TogetherJS 添加到您的网站中,您的用户可以在实时的互 ...
- iOS-上拉刷新,下拉加载-----------详解
一.使用的第三方库 1.AFNetworking ----> 网络请求 2. MJRefresh ----> 刷新 3. MBProgressHUD -- ...
- MySQL中的账号与权限管理
MySQL权限管理 权限系统的工作原理 MySQL权限系统通过下面两个阶段进行认证: (1)对连接的用户进行身份认证,合法的用户通过认证.不合法的用户拒绝连接. (2)对通过认 ...
- Android View 之进度条+拖动条+星级评论条....
PS:将来的你会感谢现在奋斗的自己.... 学习内容: 1.进度条 2.拖动条 3.星级评论条 1.进度条... 进图条这东西想必大家是很熟悉的...为了使用户不会觉得应用程序死掉了,因此 ...
- 如何将oc代码转换成运行时代码
// 运行时 其实就是oc的底层 平时写的代码 最终都是转成底层的运行时代码以下面程序为例子: 如果我们想要看我们的main.m文件底层转换成了怎样的运行时代码 ,我们可以这样做. 1.打开终端 ...
- 【转】Python中的GIL、多进程和多线程
转自:http://lesliezhu.github.io/public/2015-04-20-python-multi-process-thread.html 目录 1. GIL(Global In ...
- JS 中 this上下文对象的使用方式
JavaScript 有一套完全不同于其它语言的对 this 的处理机制. 在五种不同的情况下 ,this 指向的各不相同. 有句话说得很在理 -- 谁调用它,this就指向谁 一.全局范围内 在全局 ...
- 轻松解决MYSQL数据库连接过多的错误
1.数据库系统允许的最大可连接数max_connections.这个参数是可以设置的.如果不设置,默认是100.最大是16384. 2.数据库当前的连接线程数threads_connected.这是动 ...