代码优化---主方法尽量简洁

eg.超级猜图 <下一题按钮操作优化>

总效果:

 1 #pragma mark 下一题
 2 -(IBAction)nextQuestion
 3 {
 4     //1.当前答题的索引
 5     self.index++;
 6     //2.从数组中按照索引取出题目模型数据
 7     HMQuestion *question = self.questions[self.index];
 8
 9     //3.设置基本信息
10     [self setupBasicInfo:question];
11         //4.设置答案按钮
12     //首先清除掉答题区所有按钮
13     [self creatAnswerButtons:question];
14     //5.设置选项按钮
15     [self createOptionButtons:question];
16 }
17
18
19 /**设置基本信息*/
20 -(void)setupBasicInfo:(HMQuestion *)question
21 {
22     self.noLabel.text = [NSString stringWithFormat:@"%d/%d", self.index + 1, self.questions.count];
23
24     self.titleLable.text = question.title;
25     [self.iconButton setImage:[UIImage imageNamed:question.icon] forState:UIControlStateNormal];
26     //如果到达下一题,禁用下一天牛
27     self.nextQuestionButton.enabled = (self.index <self.questions.count-1);
28
29
30
31 }
32
33 /**创建答案区按钮*/
34
35 -(void)creatAnswerButtons:(HMQuestion *)question
36 {
37     for (UIView *btn in self.answerView.subviews) { //UIButton *btn in self.answerView.subviews 所有的UI控件都继承自UIView
38         [btn removeFromSuperview];
39
40     }
41     CGFloat answerW = self.answerView.bounds.size.width;
42     int lenght = question.answer.length;
43     CGFloat answerX = (answerW - kButtonWidth *lenght -kButtonMargin *(lenght -1))*0.5;
44     //创建所有答案按钮
45     for (int i = 0 ; i < lenght; i++) {
46         CGFloat x = answerX +i*( kButtonMargin + kButtonWidth );
47         UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(x, 0, kButtonWidth, kButtonHeight)];
48         // btn.backgroundColor =[UIColor whiteColor];
49         [btn setBackgroundImage:[UIImage imageNamed:@"btn_answer"] forState:UIControlStateNormal];
50         [btn setBackgroundImage:[UIImage imageNamed:@"btn_answer_highlighted"]forState:UIControlStateHighlighted];
51
52         [self.answerView addSubview:btn];
53     }
54
55
56
57
58 }
59
60 /** 被选取按钮*/
61 -(void)createOptionButtons:(HMQuestion *)question
62 {
63     for (UIView *view in self.optionsView.subviews) {
64         [view  removeFromSuperview];
65     }
66     CGFloat optionW = self.optionsView.bounds.size.width;
67     CGFloat optionX = (optionW - kTotolCol * kButtonWidth -(kTotolCol - 1)*kButtonMargin)*0.5;
68     for (int i = 0 ; i  <question.options.count; i++) {
69         int row =i/kTotolCol;//行
70         int col = i%kTotolCol;//列
71         CGFloat x = optionX +col * (kButtonMargin +kButtonWidth);
72         CGFloat y = row * (kButtonMargin + kButtonHeight);
73         UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(x, y, kButtonWidth, kButtonHeight)];
74
75
76         //btn.backgroundColor =[UIColor whiteColor];
77         [btn setBackgroundImage:[UIImage imageNamed:@"btn_option"] forState:UIControlStateNormal];
78         [btn setBackgroundImage:[UIImage imageNamed:@"btn_option_highlighted"] forState:UIControlStateHighlighted];
79         //设置备选答案
80         [btn setTitle:question.options[i] forState:UIControlStateNormal];
81         [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
82
83         [self.optionsView addSubview:btn];
84
85     }
86
87 }
时间: 2024-09-30 02:30:11

代码优化---主方法尽量简洁的相关文章

计算算法时间复杂度的主方法的一种较为简洁的记忆方法

这阵子在认真地看着算法导论,之前看到第四章计算分治法的时间复杂度的计算方法被称为“主方法”,运用这个主方法可以快速地口算出分治算法的递归式的时间复杂度,以下给出算法导论里关于主方法的描述吧,我就直接截图 不得不说,算法导论是一本非常偏向于数学的算法书,里面的对于各种算法结论的正确性大都有着严格的数学上的推导.之前对于主方法的描述只是大略地看了一下,看是看懂了,但是当时没有刻意将这个结论记下来,当我往后看遇到递归式求解部分的时候发觉还是忘记了主方法的求解过程,只能模糊记得部分而已,昨天晚上再复习的

【代码优化】方法签名及参数检查

参数检查: 绝大多数方法的构造器对于传递给它的参数值会有某些限制.例如,索引值必须是非负数,对象不能 为null等等. 如果传递无效参数给方法,在执行前没对参数进行检查,该方法可能在处理过程中失败,并且产生令 人费解的异常.更糟的是,该方法可以正常返回数据.但是会得到一个错误的结果,你还认为是正确的, 没发现其中的倪端. 所以对于方法参数的检查是有必要的. 常见的几个错误,IllegalArgumentException,IndexOutOfBoundsException和NullPointEx

方法与主方法

1 方法 如果方法没有返回值,则必须写void,不能省略 如果有返回值,则定义的方法的类型必须和方法体内返回值的类型相同 public String returnString(){ return"返回值是字符串类型" } 2 主方法 它是程序的入口. public static void main(String[] args){ }

交换基本数据类型的方法swap,并影响到主方法

不知道朋友在哪里看到的问题,qq来问我,题目是:在不修改主方法的前提下使用一个方法交换两个int的值,方法如下: public static void main(String[] args) { Integer a = 1; Integer b = 2; System.out.println("交换前:a="+a+",b="+b); swap(a,b); System.out.println("交换后:a="+a+",b="+

JAVA 主函数(主方法)

主函数(主方法) 1.public     (访问修饰符,公共的)代表该类或者该方法访问权限是最大的 2.static    代表主函数随着类的加载而加载 3.void    代表主函数没有具体的返回值 4.main    main不是java中的关键字,它是一个特殊的单词,它能够被JVM(java虚拟机)所识别 5.String[] args    函数的参数类型是一个字符串数组,该数组的元素是字符串,这个数组传入值的方法是在运行的时候传入,例如:javac Index.java 编译java

面向对象:封装(一):构造函数;类的主方法;权限修饰符;对象的创建

对象:一切皆为对象. 对象包括两部分内容:属性(名词形容词),行为(动词). 对象和对象之间是有关系的. 派生(子类与父类的关系),关联,依赖. 类:对同一类别的众多对象的一种抽象. 类,还是用来生成对象的一种模板,对象是类的一种具体化的表现. 面向对象的三大特性:封装,继承,多态. 一:类的定义: class 类名{ 访问修饰符 成员变量的定义; 访问修饰符 成员函数(方法)的定义; } 例1: public class Student{ public String name; public

参数可以在子方法中赋值,主方法中得到

今天看一同事的代码 list可以从另一个方法中获得值,看上去有点奇怪..list在主方法中创建并传到方法中,没有赋值的,没想到的是,在子方法中赋值,这个值居然可以带到父方法中来.. 1 import java.util.*; 2 3 public class Test { 4 public static void main(String[] args) { 5 6 Person person = new Person(); 7 int a = 100; 8 int b = person.doPe

主方法main的定义说明

主方法必须有几下几点,缺一不可: 1.访问控制符为public 2.必须为静态方法,须有static修饰 3.返回类型为void 4.方法参数为string类型的数组,数组名任意但必须满足标示符规范. ==========一下定义的main()方法,都是正确的========== //1.默认 public static void main(String[] args) { System.out.println("main method....."); } //2.static修饰符提

使用maven打包添加带有主方法类的信息

一,准备工具 1,请确定在此之前你所有的Java配置以及maven都已经正确配置 二,说明 当我们初次使用maven时,我们在pom.xml所在的目录(也就是项目的根目录)执行 mvn clean package 进行打包项目时,我们在项目输出目录(target)会看到我们指定类型的包,一般来说 maven 默认是 Jar 包,这个时候你 cmd 到该目录,执行 java -jar your-jar-pakage-name.jar,会出现找不到主方法入口的错误: 此时maven告诉我们找不到主方