如何使用 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
但问题是文本也受它影响
我需要设计如下图所示的菱形按钮。我已经尝试了两个 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
但问题是文本也受它影响