Создать topLeft и topRight углы с рамкой? - PullRequest
0 голосов
/ 30 октября 2019

Этот код создает только границу topLeft, но я также хочу topRight. Как?

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

CAShapeLayer *borderLayer = [[CAShapeLayer alloc] init];
borderLayer.frame = self.colorSliderBackgroundView.bounds;
borderLayer.path  = maskPath.CGPath;

borderLayer.lineWidth   = 1.5f;
borderLayer.strokeColor = [UIColor colorWithRed:243.0/255.0 green:243.0/255.0 blue:243.0/255.0 alpha:1.0].CGColor;
borderLayer.fillColor   = [UIColor clearColor].CGColor;

[self.colorSliderBackgroundView.layer addSublayer:borderLayer];

Ответы [ 2 ]

1 голос
/ 30 октября 2019

Исходя из вашего кода, создается впечатление, что вы хотите выделить обведенный прямоугольник с закругленными верхним левым и верхним правым углами в качестве подслоя другого представления ...

Создайте новый класс представления иустановите его как пользовательский класс для colorSliderBackgroundView.


TopCornersRoundedView.h

//
//  TopCornersRoundedView.h
//
//  Created by Don Mag on 10/30/19.
//

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

IB_DESIGNABLE

@interface TopCornersRoundedView : UIView

@end

NS_ASSUME_NONNULL_END

TopCornersRoundedView.m

//
//  TopCornersRoundedView.m
//  ObjCXIBTest
//
//  Created by Don Mag on 10/30/19.
//  Copyright © 2019 Don Mag. All rights reserved.
//

#import "TopCornersRoundedView.h"

@interface TopCornersRoundedView ()

@property (strong, nonatomic) CAShapeLayer *borderLayer;

@end

@implementation TopCornersRoundedView

- (instancetype)initWithCoder:(NSCoder *)coder
{
    self = [super initWithCoder:coder];
    if (self) {
        [self commonInit];
    }
    return self;
}

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self commonInit];
    }
    return self;
}

- (void)prepareForInterfaceBuilder {
    [super prepareForInterfaceBuilder];
    [self commonInit];
}

- (void) commonInit {

    // instantiate the shape layer
    _borderLayer = [CAShapeLayer new];

    // set line width, stroke and fill colors
    _borderLayer.lineWidth   = 1.5f;
    _borderLayer.strokeColor = [UIColor colorWithRed:243.0/255.0 green:243.0/255.0 blue:243.0/255.0 alpha:1.0].CGColor;
    _borderLayer.fillColor   = [UIColor clearColor].CGColor;

    // add the shape layer as a sublayer of self
    [self.layer addSublayer:_borderLayer];

}

- (void)layoutSubviews {
    [super layoutSubviews];

    // create a bezier path with top left and right corners rounded
    // doing this in layoutSubviews will keep the frame size correct when
    // the view changes size
    UIBezierPath *maskPath;
    maskPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds
                                     byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerTopRight)
                                           cornerRadii:CGSizeMake(10.0,10.0)];

    _borderLayer.frame = self.bounds;
    _borderLayer.path  = maskPath.CGPath;

}

@end

Обозначив этот класс как IB_DESIGNABLE, вы даже увидите результат во время разработки:

enter image description here

0 голосов
/ 30 октября 2019

Все, что вам нужно сделать, это:

UIView *view = [[UIView alloc] initWithFrame:frame];

CALayer *layer = [CALayer layer]; 
UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRoundedRect:frame byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerTopRight) 
 cornerRadii:CGSizeMake(3.0, 3.0)]; 
layer.shadowPath = shadowPath.CGPath; 
view.layer.mask = layer;

Или вы можете проверить эту ссылку для более подробной информации

как установить cornerRadius только для нижнего левого, нижнего правогои верхний левый угол textview?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...