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. hibernate关联关系的crud2

    hibernate关联关系的CRUD操作,解释都在注释里了,讲了fetchType.cascade. User类: package com.oracle.hibernate; import javax ...

  2. MVC,MVP,MVVM的区别

    MVC模型关注的是Model的不变,所以,在MVC模型里,Model不依赖于View,但是 View是依赖于Model的.不仅如此,因为有一些业务逻辑在View里实现了,导致要更改View也是比较困难 ...

  3. 2-9 js基础 cookie封装

    // JavaScript Document 'use strict'; function setCookie(sName,sValue,iDay){ if(iDay){ var oDate = ne ...

  4. UTF-8编码

    UTF-8是UNICODE的一种变长度的编码表达方式<一般UNICODE为双字节(指UCS2)>,它由Ken Thompson于1992年创建,现在已经标准化为RFC 3629.UTF-8 ...

  5. Tomcat源码分析——请求原理分析(中)

    前言 在<TOMCAT源码分析——请求原理分析(上)>一文中已经介绍了关于Tomcat7.0处理请求前作的初始化和准备工作,请读者在阅读本文前确保掌握<TOMCAT源码分析——请求原 ...

  6. xcopy命令的其他参数

    xcopy /s /e /h "c:\123" "D:\123\" 后面多一个斜杠,让程序知道是目录 以下还给您提供了 xcopy 命令的其他参数: /A 仅复 ...

  7. TabControl 选项卡控件

    TabControl 控件是由System.Windows.Forms.TabControl类提供的,作用就是讲相关的组件组合到一系列选项卡页面上.   MulitiLine 属性用来设置是否显示多行 ...

  8. jQuery基础---动画效果

    内容摘要: 1.显示.隐藏 2.滑动.卷动 3.淡入.淡出 4.自定义动画 5.列队动画方法 6.动画相关方法 7.动画全局属性  发文不易,转载请注明出处~ 一.显示.隐藏 jQuery 中显示方法 ...

  9. mongodb在w10安装及配置

    官网网站下载mongodb 第一步:安装 默认安装一直next,直到choose setup type,系统盘空间足够大,安装在c盘就好 第二步:配置及使用 1.创建目录mongodb,及三个文件夹d ...

  10. Cheatsheet: 2018 11.01 ~ 2019 02.28

    Golang FromXToGo micro - A microservice toolkit Other Easy parsing of Excel spreadsheet format with ...