美文网首页
如何实现多边形按钮、View超出部分没有点击效果

如何实现多边形按钮、View超出部分没有点击效果

作者: 给伤的你我依然喜欢 | 来源:发表于2017-09-15 23:00 被阅读49次
    正多边形,超出部分不显示,且没有点击效果

    以UIButton为例。创建一个类继承UIButton,给一个外部的属性shapePath。当给shapePath赋值的时候

    创建CAShapeLayer,作为遮掩图层。

    hitTest:withEvent: 在这个方法里面进行判断点击的点是否在显示的区域内,实现超出部分点击不到。

    .h文件

    #import@interface ShapeButton : UIButton

    @property(nonatomic , strong)UIBezierPath *shapePath;

    @end

    #import "ShapeButton.h"

    @implementation ShapeButton

    {

    CAShapeLayer *shapeLayer;

    }

    -(void)setShapePath:(UIBezierPath *)shapePath{

    _shapePath=shapePath;

    if (_shapePath==nil) {

    self.layer.mask=nil;

    return;

    }

    if (!shapeLayer) {

    shapeLayer=[CAShapeLayer layer];

    }

    shapeLayer.path=_shapePath.CGPath;

    self.layer.mask=shapeLayer;

    }

    -(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{

    if (_shapePath&&[_shapePath containsPoint:point]==NO) {

    return nil;

    }

    return [super hitTest:point withEvent:event];

    }

    @end

    2.如何绘制正多边形

    -(UIBezierPath *)width:(CGFloat )width center:(CGPoint)center lineCount:(NSInteger)count{

    UIBezierPath *auxiliaryPath=[UIBezierPath bezierPath];

    UIBezierPath *path=[UIBezierPath bezierPath];

    [auxiliaryPath moveToPoint:CGPointMake(center.x+width, center.y)];

    [path moveToPoint:auxiliaryPath.currentPoint];

    for (int i=0; i<count;i++){

    [auxiliaryPath addArcWithCenter:center radius:width startAngle:2*M_PI/(count*1.0)*i endAngle:2*M_PI/(count*1.0)*(i+1) clockwise:YES];

    [path addLineToPoint:auxiliaryPath.currentPoint];

    }

    return path;

    }

    在VC中调用

    (当然也可以半圆等其他形状的UIBezierPath)

    相关文章

      网友评论

          本文标题:如何实现多边形按钮、View超出部分没有点击效果

          本文链接:https://www.haomeiwen.com/subject/euwesxtx.html