wake-up-neo.net

wie kann man cornerRadius nur für die untere linke, rechte und obere linke Ecke einer UIView einstellen?

Gibt es eine Möglichkeit, cornerRadius nur für die untere linke, rechte und obere linke Ecke einer UIView festzulegen?

Ich habe folgendes versucht, aber es endete damit, dass die Sicht verschwinden würde. Stimmt der folgende Code nicht?

    UIBezierPath *maskPath;
    maskPath = [UIBezierPath bezierPathWithRoundedRect:view.bounds byRoundingCorners:(UIRectCornerBottomLeft | UIRectCornerBottomRight) cornerRadii:CGSizeMake(20.0, 20.0)];
    CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
    maskLayer.path = maskPath.CGPath;
    view.layer.mask = maskLayer;
32
Siva

Sie können es so machen:

UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.viewOutlet.bounds byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerBottomLeft | UIRectCornerBottomRight) cornerRadii:CGSizeMake(10.0, 10.0)];

CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
maskLayer.frame = self.view.bounds;
maskLayer.path  = maskPath.CGPath;
self.viewOutlet.layer.mask = maskLayer;

enter image description here

Update:
Wenn Sie einen Rahmen benötigen, erstellen Sie einfach eine weitere CAShapeLayer und fügen Sie sie als untergeordnete Ebene zur Ansichtsebene hinzu. Wie folgt (setzen Sie diesen Code unter den oberen Code):

CAShapeLayer *borderLayer = [[CAShapeLayer alloc] init];
borderLayer.frame = self.view.bounds;
borderLayer.path  = maskPath.CGPath;
borderLayer.lineWidth   = 4.0f;
borderLayer.strokeColor = [UIColor blackColor].CGColor;
borderLayer.fillColor   = [UIColor clearColor].CGColor;

[self.viewOutlet.layer addSublayer:borderLayer];

enter image description here

In Swift 3.0 so:

let maskPath = UIBezierPath.init(roundedRect: self.viewOutlet.bounds, byRoundingCorners:[.topLeft, .bottomLeft], cornerRadii: CGSize.init(width: 10.0, height: 10.0))
let maskLayer = CAShapeLayer()
maskLayer.frame = self.viewOutlet.bounds
maskLayer.path = maskPath.cgPath
self.viewOutlet.layer.mask = maskLayer
130
Justin Boo

Getestet in xcode 8 und Swift 3

extension UIView {
    func roundCorners(corners:UIRectCorner, radius: CGFloat) {
      let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
      let mask = CAShapeLayer()
      mask.path = path.cgPath
      self.layer.mask = mask
    }
}

Und so verwenden 

YourView.roundCorners([.topLeft, .bottomLeft], radius: 10)
15

Verwenden Sie eine benutzerdefinierte UIView und implementieren Sie den folgenden Code

#import "CustomUIView.h"

@implementation CustomView

- (void)drawRect:(CGRect)rect
{
    // Drawing code
    CAShapeLayer * maskLayer = [CAShapeLayer layer];
    maskLayer.path = [UIBezierPath bezierPathWithRoundedRect: self.bounds byRoundingCorners: UIRectCornerTopLeft | UIRectCornerBottomLeft | UIRectCornerBottomRight cornerRadii: (CGSize){20.0, 20.0}].CGPath;

    self.layer.mask = maskLayer;
}

@end

Ausgabe:

enter image description here

Schauen Sie sich die UIBezierPath.h-Optionen an:

typedef NS_OPTIONS(NSUInteger, UIRectCorner) {
    UIRectCornerTopLeft     = 1 << 0,
    UIRectCornerTopRight    = 1 << 1,
    UIRectCornerBottomLeft  = 1 << 2,
    UIRectCornerBottomRight = 1 << 3,
    UIRectCornerAllCorners  = ~0UL
};
8
Shamsudheen TK

Eckradius für eine Ansicht in Swift setzen

Die Erstellung und Maskierung von Ebenen sollte innerhalb des optionalen drawRect()-Blocks erfolgen, der von UIView geerbt wurde.

    override func drawRect(rect: CGRect) {
        super.drawRect(rect)

        let maskPath = UIBezierPath(roundedRect: self.view.bounds, byRoundingCorners: [.TopLeft, .BottomLeft, .BottomRight], cornerRadii: CGSizeMake(10, 10))
        let maskLayer = CAShapeLayer()
        maskLayer.frame = self.view.bounds
        maskLayer.path  = maskPath.CGPath
        self.view.layer.mask = maskLayer
    }
6
metpb

Ich weiß, dass es sehr spät ist, aber ich erstelle eine Methode, bei der Sie nur einen oder mehrere UIRectCorners übergeben können.

  [self setMaskTo:myView byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerTopRight)];

- (void)setMaskTo:(UIView*)view byRoundingCorners:(UIRectCorner)corners
        {
            UIBezierPath *rounded = [UIBezierPath bezierPathWithRoundedRect:view.bounds
                                                          byRoundingCorners:corners
                                                                cornerRadii:CGSizeMake(8.0, 8.0)];
            CAShapeLayer *shape = [[CAShapeLayer alloc] init];
            [shape setPath:rounded.CGPath];
            view.layer.mask = shape;
    }

hoffe das wird dir helfen

ihr Code läuft einwandfrei auf meinem Computer. Möglicherweise haben Sie CAShapeLayer frame gleich Ihrem Ansichtsrahmen gesetzt, wodurch Ihre Ansicht verschwindet. Ich sehe diese Zeile jedoch nicht in Ihrem Code. Überprüfen Sie daher Ihre Ansichtseigenschaft und wenden Sie den folgenden Code an 

  UIBezierPath *maskPath;
    maskPath = [UIBezierPath bezierPathWithRoundedRect:viewName.bounds
                                     byRoundingCorners:(UIRectCornerBottomLeft | UIRectCornerBottomRight |UIRectCornerTopLeft)
                                           cornerRadii:CGSizeMake(20.0, 20.0)];
    CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
    maskLayer.frame =viewName.bounds; 
    maskLayer.path = maskPath.CGPath;
   viewName.layer.mask = maskLayer;
3
Anurag Bhakuni

verwenden Sie diesen Code-Ecken-Radius der Ansicht nur zwei Seiten. Nach langer Zeit bekam ich den Vorschlag IOS. viewFilter ist hier ein Auslass, den wir abrunden wollen.

-(void) viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[self setMaskTo:viewFilter byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight];
}

-(void)setMaskTo:(UIView*)view byRoundingCorners:(UIRectCorner)corners{

UIBezierPath *rounded = [UIBezierPathbezierPathWithRoundedRect:view.bounds byRoundingCorners:corners cornerRadii:CGSizeMake(20.0, 20.0)];

CAShapeLayer *shape = [[CAShapeLayer alloc] init];
shape.frame = self.view.bounds;
[shape setPath:rounded.CGPath];
view.layer.mask = shape;
}
0
Maulik Patel

Unter iOS 11 benötigen Sie nur die MaskedCorners.

    let cornerRadius: CGFloat = 6.0
    if #available(iOS 11, *) {
        productImageView.layer.cornerRadius  = cornerRadius
        productImageView.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]

    } else {
        let path        = UIBezierPath(roundedRect: bounds, byRoundingCorners: [.topLeft , .topRight], cornerRadii:CGSize(width: cornerRadius, height: cornerRadius))
        let maskLayer   = CAShapeLayer()
        maskLayer.frame = bounds
        maskLayer.path  = path.cgPath
        productImageView.mask                = maskLayer
        productImageView.layer.masksToBounds = true
    }
0
Den
UIBezierPath *maskPath;
maskPath = [UIBezierPath bezierPathWithRoundedRect:someView.bounds 
                             byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerTopRight|UIRectCornerBottomLeft|UIRectCornerBottomRight) 
                                   cornerRadii:CGSizeMake(10.0,10.0,5.0, 10.0)];


CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
maskLayer.frame = self.bounds;
maskLayer.path = maskPath.CGPath;
someView.layer.mask = maskLayer;
0
Vijay Rathod

Diesen Code ausprobieren

-(void)setMaskTo:(UIView*)view byRoundingCorners:(UIRectCorner)corners {
    UIBezierPath* rounded = [UIBezierPath bezierPathWithRoundedRect:view.bounds byRoundingCorners:corners cornerRadii:CGSizeMake(10.0, 10.0)];
    CAShapeLayer* shape = [[CAShapeLayer alloc] init];
    [shape setPath:rounded.CGPath];
    view.layer.mask = shape;
}

anrufen mit

[self setMaskTo:myView byRoundingCorners:UIRectCornerTopLeft|UIRectCornerTopRight];

Verfügbare Optionen:

UIRectCornerTopLeft, UIRectCornerTopRight,UIRectCornerBottomLeft,UIRectCornerBottomRight,UIRectCornerAllCorners
0
Hardik Thakkar