zoukankan      html  css  js  c++  java
  • 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=-1;     [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+1,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-1); } /**  *  设置答案项  */ -(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=0; 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=10;         CGFloat answerW=40;         CGFloat answerH=40;         CGFloat viewW=self.view.frame.size.width;         CGFloat leftMargin=(viewW-length*answerW-(length-1)*margin)*0.5;         CGFloat answerX=leftMargin+i*(answerW+margin);         answerBtn.frame=CGRectMake(answerX, 0, 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=0; 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:23];                  NSInteger totalColumns=7;         //设置frame         CGFloat margin=13;         NSInteger row=i/totalColumns;         NSInteger col=i%totalColumns;         CGFloat optionW=45;         CGFloat optionH=45;         CGFloat viewW=self.view.frame.size.width;         CGFloat optionLeftMargin=(viewW-totalColumns*optionW-(totalColumns-1)*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==0){ //没有文字             //设置答案按钮的文字为被点击待选按钮的文字             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==0){ //没有文字                          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:500];                          //跳到下一题             [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:1];              for (UIButton *optionBtn in self.opintionView.subviews) {         if ([optionBtn.currentTitle isEqualToString:firstAnswer]) {             [self optionClick:optionBtn];             break;         }     }         //  扣分     [self scoreDelta:-700]; } /**  *  帮助  */ - (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=0;         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(97, 160, 220, 220);         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

     

  • 相关阅读:
    退役 AFO
    object_id()函数
    DataRow数组根据指定列排序
    窗口函数详解
    窗口函数详细用法
    聚合函数count里面加条件
    C#全局钩子和局部钩子记录
    SqlServer日期时间函数
    SQL中字符串截取、连接、替换等函数的用法
    C# 字符串多行显示、文本换行
  • 原文地址:https://www.cnblogs.com/qianLL/p/5260041.html
Copyright © 2011-2022 走看看