绘制多边形和不规则按钮

这篇博客展示了如何在iOS应用中利用CAShapeLayer和贝塞尔曲线来绘制不同形状的按钮,包括六边形、五边形和自定义形状,并在点击时判断点击点是否在按钮路径内,实现不规则按钮的交互响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

绘制多边形和不规则按钮。要结合上次提到的贝塞尔曲线和CAShapeLayer,去绘制你想要的形状。然后通过layer层的遮罩mask,进行设置,但仅仅这样是不够的,没有遮挡的部分也会响应点击。所以要重写Button的这个方法:pointInside,之后会详细介绍


先简单介绍一下遮罩mask这个属性:
比如layerA是layerB的mask,即layerB.mask = layerA; 那么layerA上透明的部分,会被绘制成白色挡住layerB(貌似都是白色,不知道能不能弄成其他颜色); layerA上不透明的部分,会被绘制成透明,显示出layerB的内容
即把你用贝塞尔曲线绘制的shapeLayer赋给button的layer.mask就OK了。


然后介绍一下 - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event:点击button时,会回调这个方法,参数是你点击的坐标。在里面判断该坐标点是否在path内,YES则响应,NO则不响应。



自定义封装的Button:

//绘制按钮时添加path遮罩

- (void)drawRect:(CGRect)rect

{

    [super drawRect:rect];

    CAShapeLayer *shapLayer = [CAShapeLayer layer];

    shapLayer.path = self.path.CGPath;

    self.layer.mask = shapLayer;

}


//覆盖方法,点击时判断点是否在path内,YES则响应,NO则不响应

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event

{

    BOOL res = [super pointInside:point withEvent:event];

    if (res)

    {

        if ([self.path containsPoint:point])

        {

            return YES;

        }

        return NO;

    }

    return NO;

}





ViewController:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值