APRoundedButton

https://github.com/elpsk/APRoundedButton

效果:

源码:

APRoundedButton.h

//
// Created by Alberto Pasca on 27/02/14.
// Copyright (c) 2014 albertopasca.it. All rights reserved.
// #import <UIKit/UIKit.h> @interface APRoundedButton : UIButton @property (nonatomic, assign) int style; @end

APRoundedButton.m

//
// Created by Alberto Pasca on 27/02/14.
// Copyright (c) 2014 albertopasca.it. All rights reserved.
// #import "APRoundedButton.h"
#import <QuartzCore/QuartzCore.h> @implementation APRoundedButton - (void)awakeFromNib
{
[super awakeFromNib]; UIRectCorner corners; switch ( self.style )
{
case :
corners = UIRectCornerBottomLeft;
break;
case :
corners = UIRectCornerBottomRight;
break;
case :
corners = UIRectCornerTopLeft;
break;
case :
corners = UIRectCornerTopRight;
break;
case :
corners = UIRectCornerBottomLeft | UIRectCornerBottomRight;
break;
case :
corners = UIRectCornerTopLeft | UIRectCornerTopRight;
break;
case :
corners = UIRectCornerBottomLeft | UIRectCornerTopLeft;
break;
case :
corners = UIRectCornerBottomRight | UIRectCornerTopRight;
break;
case :
corners = UIRectCornerBottomRight | UIRectCornerTopRight | UIRectCornerTopLeft;
break;
case :
corners = UIRectCornerBottomRight | UIRectCornerTopRight | UIRectCornerBottomLeft;
break;
default:
corners = UIRectCornerAllCorners;
break;
} UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds
byRoundingCorners:corners
cornerRadii:CGSizeMake(20.0, 30.0)];
CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.frame = self.bounds;
maskLayer.path = maskPath.CGPath;
self.layer.mask = maskLayer;
} @end

核心的地方:

贝塞尔曲线(矩形带圆角的那种) + CAShapeLayer + layer.mask = 上述结果

APRoundedButton的更多相关文章

随机推荐

  1. 第十篇----------javascript函数的三种定义方式及区别

    javascript定义函数有3种方式: //3种函数定义方式,前两种常用 /** * 1,function 语句式 * 形式:句子 * 名称:有名 * 性质:静态 * 解析时机:优先解析 * 作用域 ...

  2. leetcode5:subsets问题

    问题描述: Given a set of distinct integers, nums, return all possible subsets. Note: Elements in a subse ...

  3. linux系统挂载U盘,中文文件名乱码解决方案

    本人(壮壮熊)所用系统:ubuntu 12.4 今天在使用mount指令挂在硬盘时,出现令人头疼的中文文件名乱码. 问题: 使用mount /dev/sdb1 /media指令挂在第二颗硬盘的第一个分 ...

  4. [Mysql]——用户管理

    登录和退出 > mysql  -h 参数后面接hostname或者hostIP -P 参数后面接Mysql服务的端口号,通过指定的端口号来进行连接 -u 参数后面接username用户名 -p ...

  5. Django 用模板来节省公共代码,

          如果我们有一个后台网站,或者显示个人信息的网站 标题logo,边框等信息的代码都是固定的,只有部分区域是改变, 我们如果用Django来写html的话就会重复代码.这时候我们只要用模板的方 ...

  6. ASP.NET MVC Core的ViewComponent

    MVC Core新增了ViewComponent的概念,直接强行理解为视图组件,用于在页面上显示可重用的内容,这部分内容包括逻辑和展示内容,而且定义为组件那么其必定是可以独立存在并且是高度可重用的. ...

  7. jQueryEasyUI 学习笔记

    jQuery EasyUI是什么? jQuery EasyUI是一组基于jQuery的UI插件集合体,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面.开 ...

  8. Redis命令参考【EXPIRE】

    EXPIRE EXPIRE key seconds 为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除. 在 Redis 中,带有生存时间的 key 被称为『易失的』 ...

  9. HTML5--(3)过渡+动画+颜色+文本

    一.过渡transition transition-property指定属性名称 (如width.height.background-color.内外边距) all 所有属性都将获得过渡效果(默认) ...

  10. JS 教程

    1简介 1.JavaScript 是脚本语言 1.1轻量级的编程语言 1.2可插入 HTML 页面的编程代码 1.3可由所有的现代浏览器执行 2.您将学到什么 2.1JavaScript:写入 HTM ...