欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

IOS自定义UIButton九宫格效果

程序员文章站 2023-11-22 13:12:52
此篇文章给大家描写如何写自定义九宫格,因为在开发中,这种需求也是常见不少。因此,主要利用uibutton阐述的; 实列不复杂,就两三个步骤完成: 一、定义宽度与高度(self.vi...

此篇文章给大家描写如何写自定义九宫格,因为在开发中,这种需求也是常见不少。因此,主要利用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 九宫格