ios - 使用UIBezierPath给view切圆角,为什么只对一边有效?
高洛峰
高洛峰 2017-04-17 17:35:19
0
3
831

我写了一个方法,用来给控件指定的角切圆角,方法如下

- (void)maskToCorner:(UIView *)view RoundingCorners:(UIRectCorner)corner cornerRedius:(CGSize)size {
    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:view.bounds
                                                   byRoundingCorners:corner
                                                         cornerRadii:size];
    
    CAShapeLayer *maskLayer = [[CAShapeLayer alloc]init];
    maskLayer.frame = view.bounds;
    maskLayer.path = maskPath.CGPath;
    view.layer.mask = maskLayer;
}
调用方法如下:
  [_tools maskToCorner:self.cardView RoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight cornerRedius:CGSizeMake(10.0f,10.0f)];

结果只能使左上角变成圆角,右上角并没有被切,无论CGSizeMake(width,height)中的width变为多大,都只是左上角起了作用,现在不知道产生这个问题的原因是什么,还请指教。谢谢。

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

répondre à tous(3)
巴扎黑

我用过完全一样的代码,切圆角没遇到问题……

在那个方法里加上 view.clipToBounds = YES; 试试?

Ty80

楼主这个问题解决了吗,我也遇到了同样的问题,求赐教

刘奇
  override func drawRect(rect: CGRect) {
        //切左上右上圆角
        let maskPath = UIBezierPath(roundedRect:self.bounds, byRoundingCorners: [.TopLeft,.TopRight], cornerRadii: CGSizeMake(5.0, 5.0))
        let maskLayer = CAShapeLayer()
        maskLayer.frame = self.bounds
        maskLayer.path = maskPath.CGPath
        self.layer.mask = maskLayer
        
        //添加border
        let borderLayer = CAShapeLayer()
        borderLayer.frame = self.bounds
        borderLayer.path = maskPath.CGPath
        borderLayer.lineWidth = 0.5
        borderLayer.strokeColor = UIColor.lightGrayColor().CGColor
        borderLayer.fillColor = UIColor.clearColor().CGColor
        
        let layers:NSArray = self.layer.sublayers! as NSArray
        
        if ((layers.lastObject!.isKindOfClass(CAShapeLayer))) {
            layers.lastObject?.removeFromSuperlayer()
        }
        self.layer.addSublayer(borderLayer)
        
    }
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal