标签:style blog http io ar color os 使用 sp
1 // 设置状态栏是否隐藏 2 - (BOOL)prefersStatusBarHidden { 3 return NO; 4 } 5 6 // 设置状态栏 7 - (UIStatusBarStyle)preferredStatusBarStyle { 8 // 设置状态栏字体为白色 9 return UIStatusBarStyleLightContent; 10 }
1 // 5.1 删除全部旧答案的button 2 [self.answerView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
1 // 6.1 删除旧选项 2 [self.optionsView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
1 // 2 // ViewController.m 3 // CrazyGuessGame 4 // 5 // Created by hellovoidworld on 14/11/26. 6 // Copyright (c) 2014年 hellovoidworld. All rights reserved. 7 // 8 9 #import "ViewController.h" 10 #import "Question.h" 11 12 @interface ViewController () 13 14 @property (weak, nonatomic) IBOutlet UILabel *noLabel; // 序号 15 @property (weak, nonatomic) IBOutlet UILabel *titleLabel; // 标题 16 @property (weak, nonatomic) IBOutlet UIButton *icon; 17 @property (weak, nonatomic) IBOutlet UIButton *nextImageButton; 18 @property (weak, nonatomic) IBOutlet UIView *answerView; 19 @property (weak, nonatomic) IBOutlet UIView *optionsView; 20 @property (weak, nonatomic) IBOutlet UIButton *scoreButton; 21 22 - (IBAction)onTipsButtonClicked; 23 - (IBAction)onHelpButtonClicked; 24 - (IBAction)onEnlargeImgButtonClicked; 25 - (IBAction)onNextImgButtonClicked; 26 - (IBAction)onImageClicked; 27 28 /** 所有题目 */ 29 @property(nonatomic, strong) NSArray *questions; 30 31 /** 当前题目序号 */ 32 @property(nonatomic, assign) int index; 33 34 /** 遮盖阴影 */ 35 @property(nonatomic, weak) UIButton *cover; 36 37 /** 原始图片位置、尺寸 */ 38 @property(nonatomic, assign) CGRect imageOriginalFrame; 39 40 /** 答案是否已经填满标识 */ 41 @property(nonatomic, assign) BOOL isAnswerCompleted; 42 43 /** 得分 */ 44 @property(nonatomic, assign) int score; 45 46 @end 47 48 @implementation ViewController 49 50 - (void)viewDidLoad { 51 [super viewDidLoad]; 52 // Do any additional setup after loading the view, typically from a nib. 53 54 //存储原始图片的位置、尺寸信息 55 self.imageOriginalFrame = self.icon.frame; 56 57 self.index = -1; 58 [self onNextImgButtonClicked]; // 初次加载,index是0 59 } 60 61 - (void)didReceiveMemoryWarning { 62 [super didReceiveMemoryWarning]; 63 // Dispose of any resources that can be recreated. 64 } 65 66 // 改写getter, 延迟加载,此处不要使用self.questions来取得questions,否则陷入死循环 67 - (NSArray *)questions { 68 if (nil == _questions) { 69 // 1.加载plist数据 70 NSArray *questionDictArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"questions" ofType:@"plist"]]; 71 72 NSMutableArray *questionsArray = [NSMutableArray array]; 73 for (NSDictionary *questionDict in questionDictArray) { 74 // 2.将数据封装到Model "Question" 75 Question *question = [Question initWithDictionary:questionDict]; 76 [questionsArray addObject:question]; 77 } 78 79 // 3.赋值 80 _questions = questionsArray; 81 } 82 83 return _questions; 84 } 85 86 // 设置状态栏是否隐藏 87 - (BOOL)prefersStatusBarHidden { 88 return NO; 89 } 90 91 92 // 设置状态栏 93 - (UIStatusBarStyle)preferredStatusBarStyle { 94 // 设置状态栏字体为白色 95 return UIStatusBarStyleLightContent; 96 } 97 98 99 // 点击“提示”按钮 100 - (IBAction)onTipsButtonClicked { 101 // 1.清除现有的答案 102 for (UIButton *currentAnswerButton in self.answerView.subviews) { 103 [self onAnswerClicked:currentAnswerButton]; 104 } 105 106 // 2.取出正确答案片段 107 Question *question = self.questions[self.index]; 108 NSString *partOfCorrectAnswer = [question.answer substringToIndex:1]; 109 110 // 3.填充到答案区 111 for (UIButton *optionButton in self.optionsView.subviews) { 112 if ([partOfCorrectAnswer isEqualToString:optionButton.currentTitle]) { 113 [self onOptionClicked:optionButton]; 114 } 115 } 116 117 // 5.扣取相应分数 118 [self calScore:-500]; 119 } 120 121 // 点击“帮助”按钮 122 - (IBAction)onHelpButtonClicked { 123 } 124 125 // 点击“大图”按钮 126 - (IBAction)onEnlargeImgButtonClicked { 127 // 1.1添加阴影 128 UIButton *cover = [[UIButton alloc] init]; 129 cover.frame = self.view.bounds; 130 cover.backgroundColor = [UIColor blackColor]; 131 cover.alpha = 0; 132 133 // 1.2给阴影添加变回小图的触发事件 134 [cover addTarget:self action:@selector(smallImg) forControlEvents:UIControlEventTouchUpInside]; 135 136 self.cover = cover; 137 [self.view addSubview:cover]; 138 139 // 2.更换阴影和图片的位置 140 [self.view bringSubviewToFront:self.icon]; 141 142 // 3.更改图像大小,显示阴影 143 [UIView animateWithDuration:1 animations:^{ 144 cover.alpha = 0.7; 145 146 CGFloat iconWidth = self.view.frame.size.width; 147 CGFloat iconHeight = iconWidth; 148 CGFloat iconX = 0; 149 CGFloat iconY = (self.view.frame.size.height / 2) - (iconHeight / 2); 150 self.icon.frame = CGRectMake(iconX, iconY, iconWidth, iconHeight); 151 }]; 152 } 153 154 /** 缩小图片 */ 155 - (void) smallImg { 156 [UIView animateWithDuration:1 animations:^{ 157 // 1.删除阴影 158 self.cover.alpha = 0; 159 160 // 2.恢复图片 161 self.icon.frame = self.imageOriginalFrame; 162 163 } completion:^(BOOL finished) { 164 // 动画执行完成后 165 166 [self.cover removeFromSuperview]; 167 self.cover = nil; 168 }]; 169 170 } 171 172 // 点击“下一题”按钮 173 - (IBAction)onNextImgButtonClicked { 174 self.index++; 175 176 // 1.取出相应地Model数据 177 Question *question = self.questions[self.index]; 178 179 // 2.设置控件 180 [self setControls:question]; 181 182 // 3.设置答案 183 [self addAnswer:question]; 184 185 // 4.设置选项 186 [self addOptions:question]; 187 188 189 } 190 191 /** 设置控件 */ 192 - (void) setControls:(Question *) question { 193 // 1.答案是否已经填满 194 self.isAnswerCompleted = NO; 195 196 // 2.得分 197 [self.scoreButton setTitle:[NSString stringWithFormat:@"%d", self.score] forState:UIControlStateNormal]; 198 199 // 2.设置序号 200 self.noLabel.text = [NSString stringWithFormat:@"%d/%d", self.index + 1, self.questions.count]; 201 202 // 3.设置标题 203 self.titleLabel.text = question.title; 204 205 // 4.设置图片 206 [self.icon setImage:[UIImage imageNamed:question.icon] forState:UIControlStateNormal]; 207 208 // 5.设置“下一题”按钮 209 self.nextImageButton.enabled = (self.index + 1) != self.questions.count; 210 } 211 212 /** 加入答案区 */ 213 - (void) addAnswer:(Question *) question { 214 // 5.1 删除全部旧答案的button 215 [self.answerView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; 216 217 // 5.1 加入新答案 218 int answerCount = question.answer.length; // 答案字数 219 220 // 初始化尺寸信息 221 CGFloat answerWidth = 35; 222 CGFloat answerHeight = self.answerView.frame.size.height; 223 CGFloat answerMargin = 10; 224 CGFloat answerMarginLeft = (self.answerView.frame.size.width - answerWidth * answerCount - answerMargin * (answerCount - 1) ) / 2; 225 226 for (int i=0; i<question.answer.length; i++) { 227 // 计算位置 228 CGFloat answerX = answerMarginLeft + i * (answerWidth + answerMargin); 229 CGFloat answerY = 0; 230 231 UIButton *answerButton = [[UIButton alloc] initWithFrame:CGRectMake(answerX, answerY, answerWidth, answerHeight)]; 232 233 // 设置背景 234 [answerButton setBackgroundImage:[UIImage imageNamed:@"btn_answer"] forState: UIControlStateNormal]; 235 [answerButton setBackgroundImage:[UIImage imageNamed:@"btn_answer_highlighted"] forState: UIControlStateHighlighted]; 236 237 // 设置按钮点击事件,让按钮文字消失,相应的选项恢复 238 [answerButton addTarget:self action:@selector(onAnswerClicked:) forControlEvents:UIControlEventTouchUpInside]; 239 240 [self.answerView addSubview:answerButton]; 241 } 242 243 [self.view addSubview:self.answerView]; 244 } 245 246 /** 247 设置按钮点击事件,让按钮文字消失,相应的选项恢复 248 */ 249 - (void) onAnswerClicked:(UIButton *) answerButton { 250 // 1.设置答案标识 251 self.isAnswerCompleted = NO; 252 253 // 2.恢复相应的选项 254 NSString *answerTitle = [answerButton titleForState:UIControlStateNormal]; 255 for (UIButton *optionButton in self.optionsView.subviews) { 256 if ([answerTitle isEqualToString:[optionButton titleForState:UIControlStateNormal]] 257 && optionButton.isHidden) { 258 optionButton.hidden = NO; 259 break; 260 } 261 } 262 263 // 3.清除按钮上的文字 264 [answerButton setTitle:nil forState:UIControlStateNormal]; 265 266 // 4.恢复答案文字颜色 267 for (UIButton *answerButton in self.answerView.subviews) { 268 [answerButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 269 } 270 } 271 272 /** 加入选项区 */ 273 - (void) addOptions:(Question *) question { 274 // 6.1 删除旧选项 275 [self.optionsView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; 276 277 // 6.2 加入新选项 278 int optionsCount = question.options.count; 279 CGFloat optionWidth = 35; 280 CGFloat optionHeight = 35; 281 int columnCount = 7; 282 CGFloat optionMargin = 10; 283 CGFloat optionMarginLeft = (self.optionsView.frame.size.width - optionWidth * columnCount - optionMargin * (columnCount - 1)) / 2; 284 285 for (int i=0; i<optionsCount; i++) { 286 int rowNo = i / columnCount; // 当前行号,从0开始 287 int columnNo = i % columnCount; // 当前列号,从0开始 288 CGFloat optionX = optionMarginLeft + columnNo * (optionWidth + optionMargin); 289 CGFloat optionY = rowNo * (optionHeight + optionMargin); 290 291 UIButton *optionButton = [[UIButton alloc] initWithFrame:CGRectMake(optionX, optionY, optionWidth, optionHeight)]; 292 293 [optionButton setBackgroundImage:[UIImage imageNamed:@"btn_option"] forState:UIControlStateNormal]; 294 [optionButton setBackgroundImage:[UIImage imageNamed:@"btn_option_highlighted"] forState:UIControlStateHighlighted]; 295 296 [optionButton setTitle:question.options[i] forState:UIControlStateNormal]; 297 298 [optionButton addTarget:self action:@selector(onOptionClicked:) forControlEvents:UIControlEventTouchUpInside]; 299 300 [self.optionsView addSubview:optionButton]; 301 } 302 303 [self.view addSubview:self.optionsView]; 304 } 305 306 // 使点击到的选项消失 307 - (void) onOptionClicked:(UIButton *) optionButton { 308 // 1.如果答案尚未填满,使选中的选项消失 309 if (self.isAnswerCompleted) { 310 return; 311 } 312 313 optionButton.hidden = YES; 314 315 // 2.使消失的文字出现在答案区上,判断是否已经完成 316 NSString *optionTitle = [optionButton titleForState:UIControlStateNormal]; 317 318 // 遍历答案按钮 319 for (int i=0; i<self.answerView.subviews.count; i++) { 320 // 已经遍历到了最后一个答案按钮,证明已经完成了所有答案 321 if (i == self.answerView.subviews.count - 1) { 322 self.isAnswerCompleted = YES; 323 } 324 325 UIButton *answerButton = self.answerView.subviews[i]; 326 NSString *answerTitle = [answerButton titleForState:UIControlStateNormal]; 327 328 // 如果该答案按钮上没有文字,则是空,填入文字 329 if (answerTitle.length == 0) { 330 // 按钮默认的字体颜色是白色, 手动设为黑色 331 [answerButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 332 [answerButton setTitle:optionTitle forState:UIControlStateNormal]; 333 334 break; 335 } 336 } 337 338 [self dealWithAnswer]; 339 } 340 341 /** 处理答案 */ 342 - (void) dealWithAnswer { 343 if (self.isAnswerCompleted) { 344 Question *question = self.questions[self.index]; 345 NSMutableString *answerStr = [NSMutableString string]; 346 347 // 拼接已经完成的答案 348 for (UIButton *completedAnswerButton in self.answerView.subviews) { 349 [answerStr appendString:[completedAnswerButton titleForState:UIControlStateNormal]]; 350 } 351 352 // 如果答对了 353 if ([answerStr isEqualToString:question.answer]) { 354 // 答案字体转换称为蓝色 355 for (UIButton *correctAnswerButton in self.answerView.subviews) { 356 [correctAnswerButton setTitleColor:[UIColor blueColor] forState:UIControlStateNormal]; 357 } 358 359 // 延迟指定时间后跳入下一题 360 [self performSelector:@selector(onNextImgButtonClicked) withObject:nil afterDelay:0.5]; 361 362 // 加分 363 [self calScore:1000]; 364 } 365 else { 366 for (UIButton *correctAnswerButton in self.answerView.subviews) { 367 // 答案字体转换称为红色 368 [correctAnswerButton setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; 369 } 370 } 371 } 372 } 373 374 /** 原图状态点击放大,大图状态点击恢复原状 */ 375 - (IBAction)onImageClicked { 376 // 使用遮盖是否存在判断图片状态 377 378 // 1.遮盖不存在,放大图片 379 if (nil == self.cover) { 380 [self onEnlargeImgButtonClicked]; 381 } 382 else { 383 // 2.遮盖存在,恢复图片 384 [self smallImg]; 385 } 386 } 387 388 /** 计算分数 */ 389 - (void) calScore:(int) score { 390 self.score += score; 391 [self.scoreButton setTitle:[NSString stringWithFormat:@"%d", self.score] forState:UIControlStateNormal]; 392 } 393 394 @end
1 // 2 // Question.h 3 // CrazyGuessGame 4 // 5 // Created by hellovoidworld on 14/11/26. 6 // Copyright (c) 2014年 hellovoidworld. All rights reserved. 7 // 8 9 #import <Foundation/Foundation.h> 10 11 @interface Question : NSObject 12 13 @property(nonatomic, copy) NSString *answer; 14 @property(nonatomic, copy) NSString *title; 15 @property(nonatomic, copy) NSString *icon; 16 @property(nonatomic, strong) NSArray *options; 17 18 - (instancetype) initWithDictionary:(NSDictionary *) dictionary; 19 + (instancetype) initWithDictionary:(NSDictionary *) dictionary; 20 21 @end
1 // 2 // Question.m 3 // CrazyGuessGame 4 // 5 // Created by hellovoidworld on 14/11/26. 6 // Copyright (c) 2014年 hellovoidworld. All rights reserved. 7 // 8 9 #import "Question.h" 10 11 @implementation Question 12 13 - (instancetype) initWithDictionary:(NSDictionary *) dictionary { 14 if (self = [super init]) { 15 self.title = dictionary[@"title"]; 16 self.icon = dictionary[@"icon"]; 17 self.answer = dictionary[@"answer"]; 18 self.options = dictionary[@"options"]; 19 } 20 21 return self; 22 } 23 24 + (instancetype) initWithDictionary:(NSDictionary *) dictionary { 25 return [[self alloc] initWithDictionary:dictionary]; 26 } 27 28 @end
标签:style blog http io ar color os 使用 sp
原文地址:http://www.cnblogs.com/hellovoidworld/p/4127572.html