IOS自定义UIButton九宫格效果

2022-10-09,,,,

此篇文章给大家描写如何写自定义九宫格,因为在开发中,这种需求也是常见不少。因此,主要利用uibutton阐述的;

实列不复杂,就两三个步骤完成:

一、定义宽度与高度(self.view)

#define screen_width [uiscreen mainscreen].bounds.size.width
#define screen_height [uiscreen mainscreen].bounds.size.height

#define jhrgb(r,g,b) [uicolor colorwithred:(r/255.0) green:(g/255.0) blue:(b/255.0) alpha:1.0]
#define jhrandomcolor jhrgb(arc4random_uniform(255), arc4random_uniform(255), arc4random_uniform(255))

二、定义九宫格的文字与图片

@property (nonatomic, strong) nsarray * titlesarr;

@property (nonatomic, strong) uilabel * numberlab;

@property (nonatomic, strong) nsarray * titleimg;

-(nsarray *)titlesarr{
 if (!_titlesarr) {
 _titlesarr = @[@"首页",@"采购",@"文章",@"社区",@"服务",@"扫描",@"定位",@"售后",@"订单"];
 }
 return _titlesarr;
}
-(nsarray *)titleimg{
 if (!_titleimg) {
 _titleimg = @[@"me",@"msg",@"meg",@"1",@"2",@"3",@"me",@"2",@"3"];
 }
 return _titleimg;
}

三、循环出9个uibtton数据,以及相关样式动态调整

-(void)setbutton{
 nsinteger totalloc = 3;//一列三个数
 cgfloat w = 50;//宽度
 cgfloat h = w;//高度
 cgfloat margin=(self.view.frame.size.width-totalloc * w)/(totalloc+1);
 
 for (nsinteger i = 0; i < self.titlesarr.count; i++) {//循环体
 
 uibutton * btn = [uibutton buttonwithtype:uibuttontypecustom];//button的定义
 btn.frame = cgrectmake(100, 100, 80, 80);//button大小
 
 [btn settitle:self.titlesarr[i] forstate:uicontrolstatenormal];//动态设置button文本
 [btn setbackgroundimage:[uiimage imagenamed:self.titleimg[i]] forstate:uicontrolstatenormal];//动态设置图片
 [btn settitlecolor:[uicolor darkgraycolor] forstate:0];//文本的颜色
 [btn setimageedgeinsets:uiedgeinsetsmake(5, 25, 45, 25)];//图片的大小
 [btn settitleedgeinsets:uiedgeinsetsmake(80, 0, 5, 0)];//文本的位置
 //btn.backgroundcolor = [uicolor bluecolor];
 
 /*计算frame*/
 nsinteger row = i / totalloc;//行号
 nsinteger loc = i % totalloc;//列号
 //0/3=0,1/3=0,2/3=0,3/3=1;
 //0%3=0,1%3=1,2%3=2,3%3=0;
 cgfloat x= margin + (margin + w) * loc;
 cgfloat y= margin + (margin + h) * row;
 btn.frame = cgrectmake(x, y, w, h);
 
 //设置tag值(这里的tag,只是为了让button的每次点击都有不同的动画效果)
 btn.tag = i;
 
 [btn addtarget:self action:@selector(clickbtn:) forcontrolevents:uicontroleventtouchupinside];
 
 [self.lgview.imgview addsubview:btn];
 }
}

四、点击按钮的事件监听

-(void)clickbtn:(uibutton *)btn{
 
 nsstring *stringint = [nsstring stringwithformat:@"%ld",(long)btn.tag];
 
 btn.layer.transform = catransform3dmakescale(0.5*arc4random_uniform([stringint floatvalue]), 0.5*arc4random_uniform([stringint floatvalue]), 1);
 
 self.numberlab.text = btn.titlelabel.text;
 nslog(@"%@wo dian ji l:",stringint);
 [uiview animatewithduration:0.5 animations:^{
 
 btn.layer.transform = catransform3dmakescale(1, 1, 1);
 
 }];
}

总结:

如下逻辑分析:

1.上面用的是masonry布局,所以我的view容器就没用宽度,高度(写在我的view层里了)。
2.先定义一个view容器
3.在容器里,循环体里面定义button,设置button的属性等。
4.定义相关的数组,如:(文本,图片)
5.点击按钮事件触发函数;

就以上信息需要理解的逻辑,把上面的复制粘贴就可以,项目亲测可以的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

《IOS自定义UIButton九宫格效果.doc》

下载本文的Word格式文档,以方便收藏与打印。