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. 《Algorithms算法》笔记:元素排序(1)——简单排序

    <Algorithms算法>元素排序(1)——简单排序 Algorithms算法元素排序1简单排序 排序问题 1 回调函数 2Java中回调函数的路线图 3 全序 4 Comparable ...

  2. centos6 vps部署rails

    centos 6 vps初始化部署rails应用1 ssh登录 vpsssh -p port root@server_ip_address 2 添加用户 adduser usernamepasswd ...

  3. 实现Date函数属性中的format方法

    js中没有Date.format方法的,所以在date属性中加format方法 //js格式化属性 Date.prototype.format = function (format) { var o ...

  4. mysql 索引数据结构及原理

    原文:http://www.uml.org.cn/sjjm/201107145.asp 1 索引的本质 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构.提取句子 ...

  5. PHP OOP面向对象部分方法归总(代码实例子)

    <?php//对象名存在栈内存中,数据存在堆内存中class leyangjun{    var $name;  //定义变量    var $age;    var $sex;         ...

  6. VS设置护眼色

    打开vs2013 选项 环境...如图所示

  7. SpringBoot Mybatis的驼峰命名

    开启驼峰命名的方法 第一种方式: 可以在配置类中进行配置.配置的Demo如下: @Bean(name="sqlSessionFactory") public SqlSessionF ...

  8. 一、window下zookeeper独立部署

    zookeeper是一个分布式协调应用,用于管理大型主机.通俗地说,分布式应用相对于单体应用存在着很多要处理的问题,而这些问题通常是不太好处理的.比如,典型的一致性问题,而zookeeper可以很简单 ...

  9. 撩课-MySQL详解1-数据库简介

    学习地址:[撩课-JavaWeb系列1之基础语法-前端基础][撩课-JavaWeb系列2之XML][撩课-JavaWeb系列3之MySQL][撩课-JavaWeb系列4之JDBC][撩课-JavaWe ...

  10. code.google.com certificate error: certificate is for www.google.com

    有时候我们会碰到下面错误:code.google.com certificate error: certificate is for www.google.com,类似如下: D:\>go ge ...