本文实现美图秀秀首页中的按钮,它包含3张图片和一个文本。通过开发按钮,我们可以学到iOS的自定义控件,绘制图片和文本的知识。【声明:本博客只能用作学习用途,不得用于商业用途,图片资源均来自官方,产生纠纷,本人不负责】效果如下图

    

关于绘制控件显示内容,我们需要使用CoreGraphics框架,下面简单介绍一下CoreGraphics。

  CoreGraphics

  Core Graphics是苹果提供的一套基于C的API,用于绘图操作。Core Graphics 使用图形上下文进行工作,这个上下文的作用像画家的画布一样。在图形上下文之外是无法绘图的,我们可以自己创建一个上下文,但是性能和内存的使用上,效率是非常低得。我们可以通过派生一个UIView的子类,获得它的上下文。在UIView中调用drawRect:方法时,会自动准备好一个图形上下文,可以通过调用UIGraphicsGetCurrentContext()来获取。 因为它是运行期间绘制图片,我们可以动态的做一些额外的操作。drawRect:是系统的方法,不要从代码里面直接调用 drawRect:,而应该使用setNeedsDisplay重绘.

  优点:

  快速、高效,减小应用的文件大小。同时可以自由地使用动态的、高质量的图形图像。 使用Core Graphics,可以创建直线、路径、渐变、文字与图像等内容,并可以做变形处理。

  图片资源

第一张为按钮UIControlStateNormal正常状态下的背景图片,第二张为按钮按下去的背景图片。‘

  绘制背景

 if (self.state == UIControlStateNormal) {buttonImage = self.normalButtonImage;CGContextSetFillColorWithColor(context, self.backgroundColor.CGColor);}else {CGContextSetFillColorWithColor(context, self.backgroundColorHighlighted.CGColor);if (self.titleLabel.text.length > 0) {
        }if (self.normalButtonImage != self.highlightedButtonImage && self.highlightedButtonImage != nil) {buttonImage = self.highlightedButtonImage;}else{buttonImage = self.normalButtonImage;}}

  绘制按钮显示图片

    CGRect buttonRect = CGRectMake(0.f, 0.f, rect.size.width, rect.size.height);

UIBezierPath *buttonBezier = [UIBezierPath bezierPathWithRoundedRect:buttonRect cornerRadius:self.cornerRadius];

    [buttonBezier addClip];

CGContextFillRect(context, buttonRect);

    if (buttonImage != nil) {CGImageRef buttonCGImage = buttonImage.CGImage;CGSize imageSize = CGSizeMake(CGImageGetWidth(buttonCGImage)/[self scale], CGImageGetHeight(buttonCGImage)/[self scale]);CGFloat buttonYOffset = (rect.size.height-kButtonOffset)/2.f - imageSize.height/2.f + kTopPadding;if (self.titleLabel.text.length == 0) {buttonYOffset = rect.size.height/2.f - imageSize.height/2.f;}[buttonImage drawInRect:CGRectMake(rect.size.width/2. - imageSize.width/2.f,buttonYOffset,imageSize.width,imageSize.height)];}

  绘制文本

    if (self.titleLabel.text.length > 0) {if (self.state == UIControlStateNormal) {CGContextSetFillColorWithColor(context, self.normalTextColor.CGColor);}else {CGContextSetFillColorWithColor(context, self.highlightedTextColor.CGColor);}[self.titleLabel.text drawInRect:CGRectMake(0.f, (buttonImage != nil ? rect.size.height-kButtonOffset+self.topPading *kTopPadding: rect.size.height/2 - 10.f), rect.size.width, 20.f)withFont:self.titleLabel.fontlineBreakMode:self.titleLabel.lineBreakModealignment:UITextAlignmentCenter];}

  添加按钮

btnHome = [FWButton button];[btnHome setTitle:[textArr objectAtIndex:i] forState:UIControlStateNormal];[btnHome setImage:[UIImage imageNamed:[imageViewImageArr objectAtIndex:i]] forState:UIControlStateNormal];[btnHome setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:[imageViewBackImageArr objectAtIndex:i]]]];[btnHome setBackgroundColorHighlighted:[UIColor colorWithPatternImage:[UIImage imageNamed:[highLightedBackImageArr objectAtIndex:i]]]];btnHome.frame = CGRectMake(row * (kWidth + kPadding) + page * WIDTH + startX, col * (kHeight + kPadding) + startY, kWidth, kHeight);[btnHome.titleLabel setFont:[UIFont systemFontOfSize:14]];[btnHome addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];btnHome.topPading = 0.5;[self.scrolleView addSubview:btnHome];

项目下载

注:每篇随笔的项目代码都会有区别,请按需下载。

美图秀秀首页界面按钮设计(二)相关推荐

  1. 美图秀秀首页界面设计(一)

    本文设计了美图秀秀官方版的界面,从中可以学到自定义View,自动布局,启动界面设置.代码有点凌乱,我在一步步改善.[声明:本博客只能用作学习用途,不得用于商业用途,图片资源均来自官方,产生纠纷,本人不 ...

  2. 美图秀秀想让妹纸留下来分享美图,社交梦能如愿以偿吗?

    日前美图秀秀开始内测名为"MT社交圈"的新功能,我受邀参加内测,体验发现这是一款基于图片和短视频内容的社区,用户可以发布图片和短视频两类内容,可以对他人的内容进行点赞.评论和转发, ...

  3. 美图秀秀-美化图片之【背景虚化】界面设计

    本文是背景虚化界面设计,在美图秀秀的背景虚化模块主要是图像的模糊处理,可以按照圆形和线性进行模糊处理,并生成选定的形状. 在开发中遇到的误区 1.模糊形状使用UIImageView,遇到一些麻烦,即使 ...

  4. 美图秀秀-美化图片之【特效】界面设计

    本文是特效界面设计,在美图秀秀的特效模块主要是实现图片添加滤镜效果,界面挺炫的. 界面包含黑边和虚化按钮,4种类型的滤镜,每种类型又包含许多具体滤镜效果,当我们点击时候开始处理图片 1.加载图片 se ...

  5. 美图秀秀美化图片之【智能优化】模块界面设计

    美图秀秀的智能优化界面十分简单明了,它只包含了一张要进行处理的图片和一个bar,再就是取消操作和保存操作的2个按钮,先附一张界面图 一.点击美化图片首页[智能优化],进入具体操作界面 FWFuncti ...

  6. MATLAB美图秀秀系统GUI设计[完美运行,GUI界面,详细教程,万字文稿]

    课题名称 基于MATLAB的美图秀秀系统GUI设计 GUI框架链接:matlab美图秀秀[GUI,磨皮,白平衡,特效].zip_matlabGUI制作美图秀秀界面-专业指导文档类资源-CSDN下载 课 ...

  7. 期末大作业之Matlab美图秀秀【GUI界面】

    一.任务描述 该项目是基于MATLAB+Python+opencv的美图秀秀工具包,且实现了GUI可视化界面.工具包括图像处理基础功能,如选择保存撤销图片.摄像头拍照.特征点定位.退出等:基本编辑功能 ...

  8. Matlab简易版美图秀秀(GUI界面实现)

    该项目为数字图像处理课程的期末大项目,主要内容是用matlab软件实现一些美图秀秀相关功能,比如对图像进行水平垂直翻转,旋转,裁剪,抠图等基础功能:对图像添加浮雕,艺术噪声,灰度胶片,动感模糊,素描, ...

  9. 贴吧二维码防删图制作美图秀秀

    贴吧二维码防删图技术 这里首先要说一下,做二维码的几个主要问题: 1:账号是最主要问题,必须好 养也好,买也好,账号因素还是很大的 2:吧,有些吧就是可以赤罗罗的发,有些就需要处理,所以处理技术还是要 ...

最新文章

  1. ffmpeg architecture(中)
  2. JVM 调优实战--什么是调优及如何调优的思路
  3. python爬虫-爬取今日头条(图集)
  4. 重学TCP协议(3) 端口号及MTU、MSS
  5. 插入排序:表折半插入
  6. Julia学习(1)——入门
  7. 【java基础知识】判断字符串不为空
  8. 前端处理方式:特殊格式时间转换(2020-11-27T02:58:41.000000Z)
  9. dump排查内存异常 java_如何排查Java应用内存泄漏问题
  10. 3D打印自动支撑算法
  11. [工具(前端)] 后台管理模板
  12. Apache Geronimo监控
  13. HTML网页设计制作 dreamweaver网页源代码 北京故宫旅游景点网站设计
  14. linux下cat导出日志,Linux命令:cat
  15. vhd虚拟硬盘作用_如何从VHD(虚拟硬盘)引导和安装Windows 8 Consumer Preview的指南
  16. MyEclipse快捷键Alt+Shift+s详解
  17. 老男孩22期python视频_老男孩Ptython全栈架构师视频教程 Python最新整理完整版22期视频教程 超60G课程容量...
  18. 【Allen方差】计算allen方差
  19. as.net core 5.0 Configuration读取consul的kv存储
  20. uniapp实现滑动答题

热门文章

  1. [Python] isinstance() for checking object type
  2. Excel表格内容导出到页面
  3. ASP.NET Zero--5.配置权限
  4. php session_regenerate_id,什么时候以及为什么我应该使用session_regenerate_id()?
  5. Jlink commander、MCU GD32启动方式、Bootloader
  6. python items函数用法,Python中dictionary items()系列函数的用法实例
  7. 主页是单一的HTML文件,什么是主页,下列说法最为准确的是 _____。
  8. Linux操作系统安装字体笔记
  9. 开发工具:Intellij IDEA 非常实用的小技巧,你确定不来看看?
  10. 操作系统基础:存储管理知识笔记(一)