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.点击按钮事件触发函数;
就以上信息需要理解的逻辑,把上面的复制粘贴就可以,项目亲测可以的。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 开窗函数有浅入深详解(一)
下一篇: drf源码save以及response