Loading

IOS:九宫格的实现及添加删除操作

          先上结果图看下

         

 

 

 

         一开始设置两个按钮,其实这两个按钮没必要用懒加载的方式,因为这是一开始就要用或者说常用的东西,直接写比较好。然后提示的label和图片信息的数组,都是该用到的时候才去加载。

         图片我是事先改名1-9了,直接把名字循环存到数组里。然后创建ImageView的时候根据下标取值。

        按钮的点击,会改变下标值。imageView的XY 值根据下标值算的,同时根据index设置自身的标记,删除imageView就是根据这个来。

         imageview的tag,原来我是根据index来的,后来一删除就黑屏,感觉是把self.view移除了。看网上说是viewwithtag会查找自身,估计自身的tag和imageview的重了把。于是我把imageview的tag+10,这样就没问题了

  1 static int arrindex=0;
  2 @interface ViewController ()
  3 @property(strong,nonatomic)UILabel  *itemlabel;
  4 @property(strong,nonatomic) UIButton *addBtn;
  5 @property(strong,nonatomic)  UIButton *removeBtn;
  6 @property(strong,nonatomic)NSMutableArray<UIImage *> *imageArr;
  7 @property(strong,nonatomic)UIImageView *imageView;
  8 @end
  9 
 10 @implementation ViewController
 11 
 12 - (void)viewDidLoad {
 13     [super viewDidLoad];
 14     // Do any additional setup after loading the view.
 15     [self setBaseUI];
 16 //    self.view.backgroundColor=[UIColor redColor];
 17  
 18 }
 19 -(UIButton *)addBtn{
 20     if(!_addBtn){
 21         _addBtn=[UIButton buttonWithType:UIButtonTypeCustom];
 22         _addBtn.frame=CGRectMake(50, 200, 100,40 );
 23         _addBtn.backgroundColor=[UIColor grayColor];
 24         [_addBtn setTitle:@"添加" forState:UIControlStateNormal];
 25          [_addBtn setTitle:@"添加" forState:UIControlStateHighlighted];
 26          [  _addBtn addTarget:self action:@selector(btn1Click) forControlEvents:UIControlEventTouchUpInside];
 27         [_addBtn setTag:1];
 28       [self.view  addSubview:_addBtn];
 29     }
 30     return _addBtn;
 31     
 32 }
 33 -(UIButton *)removeBtn{
 34     if(!_removeBtn){
 35         _removeBtn=[UIButton buttonWithType:UIButtonTypeCustom];
 36         _removeBtn.frame=CGRectMake(self.view.bounds.size.width-50-100, 200, 100,40 );
 37         _removeBtn.backgroundColor=[UIColor grayColor];
 38         [_removeBtn setTitle:@"删除" forState:UIControlStateNormal];
 39         [_removeBtn setTitle:@"删除" forState:UIControlStateHighlighted];
 40         [  _removeBtn addTarget:self action:@selector(btn2Click) forControlEvents:UIControlEventTouchUpInside];
 41         [_removeBtn setTag:2];
 42        [self.view  addSubview:_removeBtn];
 43     }
 44     return _removeBtn;
 45     
 46 }
 47 
 48 -(UILabel *)itemlabel{
 49     if(!_itemlabel)
 50     {
 51         _itemlabel=[[UILabel alloc]initWithFrame:CGRectMake(170, 150, 200, 40)   ];
 52         _itemlabel.textColor=[UIColor redColor];
 53         [self.view addSubview:_itemlabel];
 54     }
 55     return _itemlabel;
 56     
 57 }
 58 -(void)setBaseUI{
 59     [self  addBtn];
 60     [self  removeBtn];
 61 }
 62 
 63 -(void)btn1Click{
 64     NSLog(@"点击了添加按钮");
 65     if(arrindex==9)
 66     {
 67         NSLog(@"图片已结束");
 68         self.itemlabel.text=@"图片已结束";
 69        return;
 70     }
 71     self.itemlabel.text=@"";
 72     [self setXY:arrindex:_addBtn];
 73    arrindex=arrindex+1;
 74 }
 75 -(void)btn2Click{
 76     NSLog(@"点击了删除按钮");
 77     if(arrindex==0)
 78     {
 79         NSLog(@"暂无图片");
 80         self.itemlabel.text=@"暂无图片";
 81         return;
 82     }
 83     self.itemlabel.text=@"";
 84     [self setXY:arrindex:_removeBtn];
 85      arrindex=arrindex-1;
 86 }
 87 //将图片存入数组
 88 -(NSMutableArray<UIImage *> *)imageArr{
 89     //将事先的图片信息存入数组里
 90     if(!_imageArr)
 91     {
 92       _imageArr=[NSMutableArray array];
 93     for(int i=0;i<9;i++)
 94         {
 95         NSString  *imageName=[NSString stringWithFormat:@"%d",i+1];
 96         UIImage *image=[UIImage imageNamed:imageName];
 97         [_imageArr addObject:image];
 98         }
 99     }
100     return _imageArr;
101 }
102 
103 //UIImageView的设定
104 -(void)imageView:(CGFloat )locx:(CGFloat)locY:(int )index{
105     CGFloat x=locx;
106     CGFloat y=locY;
107     //传入图片的下标值
108     int arrindex=index;
109     //坐标传入决定
110     _imageView=[[UIImageView alloc]initWithFrame:CGRectMake(x, y, 100, 100)];
111     _imageView.image=  [self.imageArr objectAtIndex:arrindex];
112     /*设置imageview的tag,以便后续的删除,删除肯定是要根据标记来。
113      还有种是self.view.subviews lastobject,但是因为我加了一个label,所以用这个肯定是不太合适的。
114      */
115     _imageView.tag=arrindex+10;
116     _imageView.backgroundColor=[UIColor redColor];
117     [self.view addSubview:_imageView];
118     
119 }
120 
121 -(void)setXY:(int )index:(UIButton *)button{
122     if(button.tag==1)
123     {
124     CGFloat viewW=self.view.bounds.size.width;
125     int row=index/3;
126     int col=index%3;
127     /*假如我们设定每个UIimageView的大小是100*100
128      每行之间的距离为30。第一行从Y-250的位置开始
129      */
130     CGFloat space=(viewW-300)/2;
131     
132     CGFloat x=col*(space+100);
133     CGFloat y=250+row*(30+100);
134     [self imageView:x:y:index];
135     }
136     if(button.tag==2)
137     {
138         UIImageView *imageview=[self.view viewWithTag:index-1+10 ];
139         [imageview removeFromSuperview];
140     }
141 }
142 
143 @end

 

posted @ 2020-09-16 15:57  DDD-SagerKing  阅读(471)  评论(0编辑  收藏  举报