大致思路:1.首先通过循环的方法完成基本布局
2.每一个点都要保证相邻点的状态与它保持一致,(边的位置特殊考虑即可)
//关灯游戏 1 #import "ViewController.h" 2 3 @interface ViewController () 4 5 @property (nonatomic, strong)UIButton *but; 6 @property (nonatomic, strong)NSString *str;//用来记录灯的当前状态 7 8 @end 9 10 @implementation ViewController 11 12 - (void)viewDidLoad { 13 [super viewDidLoad]; 14 15 [self loadButton];//灯布局 16 17 18 } 19 20 //基本布局 21 - (void)loadButton 22 { 23 //设置灯的初始状态为亮的状态 24 _str = [NSString stringWithFormat:@"iconfont-bulb"]; 25 //用循环形式实现基本布局 26 NSInteger n = 100; 27 for (int i = 0 ;i < 4 ; i++) 28 for (int y = 0; y < 4; y++) 29 { 30 _but = [UIButton buttonWithType:UIButtonTypeCustom]; 31 //设置位置和大小 32 _but.frame = CGRectMake(i*self.view.frame.size.width/4+10, y*self.view.frame.size.width/4+80,self.view.frame.size.width/4-20, 50); 33 //添加 34 [self.view addSubview:_but]; 35 //设置背景色 36 [_but setBackgroundImage:[UIImage imageNamed:_str] forState:UIControlStateNormal]; 37 //设置按钮addtarget/action事件 38 [_but addTarget:self action:@selector(Click:) forControlEvents:UIControlEventTouchUpInside];//点击事件 39 //设置tag值,区分button 40 [_but setTag:n]; 41 42 n++; 43 } 44 } 45 46 //button的按钮点击触发事件 47 - (void)Click:(UIButton *)butt 48 { 49 NSInteger n = butt.tag; 50 NSLog(@"%ld",n); 51 //如果不是亮灯状态 52 if ([_str isEqual:@"iconfont-4-2"] == NO) 53 { 54 //背景色设置成亮灯 55 [butt setBackgroundImage:[UIImage imageNamed:@"iconfont-4-2"] forState:UIControlStateNormal]; 56 _str = @"iconfont-4-2"; 57 } 58 else //否则设置成关灯状态 59 { 60 NSLog(@"%@",_str); 61 _str = @"iconfont-bulb"; 62 [butt setBackgroundImage:[UIImage imageNamed:_str] forState:UIControlStateNormal]; 63 } 64 65 //如果为第一行则左右下状态要与其保持一致 66 if(n == 104 || n == 108 || n == 112) 67 { 68 //按钮状态保持一致 69 butt = (UIButton *)[self.view viewWithTag:n + 1]; 70 71 [butt setBackgroundImage:[UIImage imageNamed:_str] forState:UIControlStateNormal]; 72 73 butt = (UIButton *)[self.view viewWithTag:n + 4]; 74 75 [butt setBackgroundImage:[UIImage imageNamed:_str] forState:UIControlStateNormal]; 76 77 butt = (UIButton *)[self.view viewWithTag:n - 4]; 78 79 [butt setBackgroundImage:[UIImage imageNamed:_str] forState:UIControlStateNormal]; 80 } 81 82 //如果为最后一行,左右上要与其状态保持一致 83 else if (n == 103 || n == 107 || n == 111) 84 { 85 //按钮状态保持一致 86 butt = (UIButton *)[self.view viewWithTag:n - 1]; 87 88 [butt setBackgroundImage:[UIImage imageNamed:_str] forState:UIControlStateNormal]; 89 90 butt = (UIButton *)[self.view viewWithTag:n + 4]; 91 92 [butt setBackgroundImage:[UIImage imageNamed:_str] forState:UIControlStateNormal]; 93 94 butt = (UIButton *)[self.view viewWithTag:n - 4]; 95 96 [butt setBackgroundImage:[UIImage imageNamed:_str] forState:UIControlStateNormal]; 97 } 98 //剩余地方则前后左右都与其状态保持一致 99 else 100 { 101 butt = (UIButton *)[self.view viewWithTag:n + 1]; 102 103 [butt setBackgroundImage:[UIImage imageNamed:_str] forState:UIControlStateNormal]; 104 105 butt = (UIButton *)[self.view viewWithTag:n - 1]; 106 107 [butt setBackgroundImage:[UIImage imageNamed:_str] forState:UIControlStateNormal]; 108 109 butt = (UIButton *)[self.view viewWithTag:n + 4]; 110 111 [butt setBackgroundImage:[UIImage imageNamed:_str] forState:UIControlStateNormal]; 112 113 butt = (UIButton *)[self.view viewWithTag:n - 4]; 114 115 [butt setBackgroundImage:[UIImage imageNamed:_str] forState:UIControlStateNormal]; 116 117 } 118 }
效果图:
时间: 2024-10-10 11:19:03