如何使用 Objective-C iOS 创建菱形按钮

How to create Diamond shape Button using Objective-C iOS

我需要设计如下图所示的菱形按钮。我已经尝试了两个 UIViews 并且我能够通过子类化 UIView 在视图之上绘制菱形。但问题是这两个视图是重叠的..!

这是我用过的方法:

- (void)drawRect:(CGRect)rect {
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 4.0);
    CGContextSetStrokeColorWithColor(context, 
      [UIColor blueColor].CGColor);
    CGContextMoveToPoint(context, 100, 100);
    CGContextAddLineToPoint(context, 150, 150);
    CGContextAddLineToPoint(context, 100, 200);
    CGContextAddLineToPoint(context, 50, 150);
    CGContextAddLineToPoint(context, 100, 100);
    CGContextStrokePath(context);
}

你无法避免视图的重叠。视图是矩形的!

可以做的是避免钻石图以外区域的可点击性。您可以通过修改这些按钮的命中测试来做到这一点,因此只有当用户在菱形内部点击时,该按钮才会 "touched"。

您可以轻松地将正方形变成菱形。假设您有一个名为 diamond 的方形按钮,下面的转换会生成一个菱形。

CGAffineTransform tr = CGAffineTransformIdentity;
tr = CGAffineTransformScale(tr, 0.8, 1);
tr = CGAffineTransformRotate(tr, M_PI_4);
self.diamond.transform = tr;

这就是 swift 中的样子,以防有人疑惑

var tr = CGAffineTransformIdentity tr = CGAffineTransformScale(tr, 0.8, 1) tr = CGAffineTransformRotate(tr, M_PI_4) self.diamond.transform = tr

但问题是文本也受它影响

enter image description here