超级猜图

1,模型封装,读取plist数据,并且封装成模型

-(NSArray *)questions{
    if (_questions == nil) {
        NSString *path = [[NSBundle mainBundle] pathForResource:@"questions.plist" ofType:nil];
        NSArray *arrayDict = [NSArray arrayWithContentsOfFile:path];
        NSMutableArray *arrayModel = [NSMutableArray array];
        //遍历
        for (NSDictionary *dict  in arrayDict) {
            YQLQuestion *model = [YQLQuestion questionWithDict:dict];
            [arrayModel addObject:model];
        }
        _questions = arrayModel;
    }
    return  _questions;
}

 2,判断当前btn上的标题,是否已经满了,满了的话,界面不接收点击事件

-(void)optionButtonDidClicked:(UIButton *)sender{
    //隐藏当前被点击的按钮
    sender.hidden = YES;
    //把当前被点击的文字显示到答案按钮上
    NSString *text = sender.currentTitle;
    //吧文字显示到答案按钮上
    for (UIButton *answerBtn  in self.answerView.subviews) {
        //判断每个答案按钮上的答案文字
        if (answerBtn.currentTitle == nil) {
            [answerBtn setTitle:text forState:UIControlStateNormal];
            break;
        }
    }
    BOOL isFull = YES;
    for (UIButton *btnAnswer in self.answerView.subviews) {
        if (btnAnswer.currentTitle == nil) {
            isFull = NO;
            break;
        }
    }
    //判断答案按钮是否已经满了
    if (isFull) {
        //禁止待选按钮被点击
        self.optionsView.userInteractionEnabled = NO;
    }
}

 3,设置禁用下一题按钮

//设置到达最后一题禁用下一题按钮
    self.btnNext.enabled = (self.index!= self.questions.count-1);

 4,清除所有按钮

//创建前先清除之前的按钮

    //    while (self.answerView.subviews.firstObject) {

    //        [self.answerView.subviews.firstObject removeFromSuperview];

    //    }或者用下面的方法,让数组中的每一个子对象分别调用这个方法,内部循环,无需我们自己来循环

    [self.answerView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

 5,获取按钮上当前按钮的文字

 //把当前被点击的文字显示到答案按钮上
//    NSString *text = [sender titleForState:UIControlStateNormal];
    NSString *text = sender.currentTitle;

 6.每个model封装技巧

@interface YQLQuestion : 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;
-(instancetype)initWithDict:(NSDictionary *)Dict{
    if (self = [super init]) {
        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];
}

如果封装的模型里面的key与传进来的字典的key值相同,那么可以用KVC实现

[self setValueForKeysWithDictionary:dict]; 

7,修改启动图

1-直接在LaunchScreen.xib里面设置,这种是系统将xib里面的图片截图,设置成启动图。

2-工程设置里,选中项目,App Icons and Launch Images ,选中Launch images Souce ,点击Use Asset Catalog,点击Migrate,把Launch ScreenFiles删掉,在Images.xcassets里面就有了LunchImage,将做好的图片添加进去即可。

原文地址:https://www.cnblogs.com/yangqinglong/p/5520069.html