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. 【es6】字符串扩展

    8.模板字符串 模板字符串(template string)是增强版的字符串,用反引号(`)标识.它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量. ${}中可以放   1. ...

  2. 深度学习(七)U-Net原理以及keras代码实现医学图像眼球血管分割

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9780786.html DRIVE数据集下载百度云链接:链接:https://pan.baidu ...

  3. JavaScript设计模式-2高级类.

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. 关于禁止html缓存

    在现代的浏览器里,为了增强用户体验,浏览器一般都会把网页上所需的静态文件缓存到本地,再次刷新的时候则无需再重新加载,但是我们有时候就是不需要浏览器缓存这些文件,而是每次都从服务器端读取数据,可以用以下 ...

  5. 【LESS系列】三角形Mixins

    又是一篇自 W3CPLUS 中转化而来的文章. 和 W3CPLUS 上的做法,在设计上最大的不同就在于,这里我用的是多个 Mixins 函数来实现. 先总结这种做法的特点: 需要额外的标签来实现,因此 ...

  6. java几个经典的算法题目----------二维矩阵算法

    public class testClockwiseOutput { public static void main(String[] args) { //1.构建矩阵数据 int[][] arr = ...

  7. [PY3]——内置数据结构(1)——列表及其常用操作

    列表及其常用操作_xmind图         about列表 列表是一个序列,用于顺序存储数据 列表分为两种:ArrayList(用数组实现).LinkedList(用链表实现) 定义与初始化 #l ...

  8. Python 逐行分割大txt文件

    # -*- coding: <encoding name> -*- import io LIMIT = 150000 file_count = 0 url_list = [] with i ...

  9. 基于开源Red5搭建的视频直播平台

    开始之前,为了便于大家了解Red5,此处引用网络文字,非原创 引言 流媒体文件是目前非常流行的网络媒体格式之一,这种文件允许用户一边下载一边播放,从而大大减少了用户等待播放的时间.另外通过网络播放流媒 ...

  10. The following control could not be licensed: TXTextControl.TextControl。。解决方案

    在这篇博客中,下面的控制不能授权:txtextcontrol.textcontrol这意味着,找不到合适的许可证来验证控制.一般情况下,许可证将被自动纳入应用程序,通常不必担心许可证的所有. “许可证 ...