如何绘制一个平行四边形button

我需要绘制一个平行四边形形状的自定义button。 做这个的最好方式是什么? 图像方式(即为控件设置背景图像)不适合。

如果您不需要为button设置任何图像, Brain89提供的解决scheme是很好的。 我有背景和内容图像,我需要做一个平行四边形button,而不会改变图像。 我使用下面的代码:

// Pass 0..1 value to either skewX if you want to compress along the X axis // or skewY if you want to compress along the Y axis - (void)parallelogramButtonWithButton:(UIButton *)button withSkewX:(CGFloat)skewX withSkewY:(CGFloat)skewY { CGAffineTransform affineTransform = CGAffineTransformConcat(CGAffineTransformIdentity, CGAffineTransformMake(1, skewY, skewX, 1, 0, 0)); button.layer.affineTransform = affineTransform; } 

希望这很容易。 一些谷歌search后,我想出了解决scheme

UIParallelogramButton.h

 #import <UIKit/UIKit.h> #import "QuartzCore/QuartzCore.h" @interface UIParallelogramButton : UIButton { CGFloat offset; } @property CGFloat offset; @end 

UIParallelogramButton.m

 #import "UIParallelogramButton.h" @implementation UIParallelogramButton @synthesize offset; - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { offset = 0.0F; } return self; } - (void)drawRect:(CGRect)rect { UIBezierPath* maskPath = [UIBezierPath bezierPath]; [maskPath moveToPoint:CGPointMake(rect.origin.x + offset, rect.origin.y)]; [maskPath addLineToPoint:CGPointMake(rect.size.width + rect.origin.x, rect.origin.y)]; [maskPath addLineToPoint:CGPointMake(rect.origin.x + rect.size.width - offset, rect.origin.y + rect.size.height)]; [maskPath addLineToPoint:CGPointMake(rect.origin.x, rect.origin.y + rect.size.height)]; [maskPath closePath]; CAShapeLayer* maskLayer = [[CAShapeLayer alloc] init]; maskLayer.frame = self.bounds; maskLayer.path = maskPath.CGPath; self.layer.mask = maskLayer; } @end