Предоставление UIView закругленных углов

в моем представлении входа есть подпространство, которое имеет UIActivityView и UILabel говоря " вход в систему...". У этого подвида есть углы, которые не закруглены. Как я могу сделать их круглыми?

есть ли способ сделать это в моем xib?

19 ответов


попробуй такое

#import <QuartzCore/QuartzCore.h> // not necessary for 10 years now  :)

...

view.layer.cornerRadius = 5;
view.layer.masksToBounds = true;

Примечание: Если вы пытаетесь применить закругленные углы в UIViewControllerпредставление, оно не должно применяться в конструкторе контроллера представления, а скорее в -viewDidLoad, после view на самом деле инстанцировать.


вы также можете использовать Пользовательские Атрибуты Выполнения функция interface builder для установки ключевого пути layer.cornerRadius значение. Убедитесь, что вы включили QuartzCore библиотеки, хотя.

этот трюк также работает для создания слоя.borderWidth однако он не будет работать для layer.borderColor как это ожидает CGColor не UIColor.

вы не сможете увидеть эффект в раскадровке, потому что эти параметры оцениваются во время выполнения.

Using Interface builder to set the corner radius


теперь вы можете использовать категорию swift в UIView (код ниже изображения) в with @IBInspectable, чтобы показать результат на раскадровке (если вы используете категорию, используйте только cornerRadius, а не слой.cornerRadius как ключевой путь.

extension UIView {
    @IBInspectable var cornerRadius: CGFloat {
        get {
            return layer.cornerRadius
        }
        set {
            layer.cornerRadius = newValue
            layer.masksToBounds = newValue > 0
        }
    }
}

enter image description here


другой подход, чем тот, который сделал Эд Марти:

#import <QuartzCore/QuartzCore.h>

[v.layer setCornerRadius:25.0f];
[v.layer setMasksToBounds:YES];

вам нужны setMasksToBounds для загрузки всех объектов из IB... у меня возникла проблема, когда мой взгляд округлился, но не было объектов из IB:/

это исправлено =D надеюсь, что это поможет!


Свифт

короткий ответ:

myView.layer.cornerRadius = 8
myView.layer.masksToBounds = true  // optional

Дополнительный Ответ

если вы пришли к этому ответу, вы, вероятно, уже видели достаточно, чтобы решить вашу проблему. Я добавляю этот ответ, чтобы дать немного более наглядное объяснение, почему делать то, что они делают.

если вы начинаете с обычного UIView он имеет квадратные углы.

let blueView = UIView()
blueView.frame = CGRect(x: 100, y: 100, width: 100, height: 50)
blueView.backgroundColor = UIColor.blueColor()
view.addSubview(blueView)

enter image description here

вы можете дать ему круглые углы изменение cornerRadius свойство вида layer.

blueView.layer.cornerRadius = 8

enter image description here

большие значения радиуса дают более закругленные углы

blueView.layer.cornerRadius = 25

enter image description here

и меньшие значения дают меньше закругленными углами.

blueView.layer.cornerRadius = 3

enter image description here

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

let mySubView = UIView()
mySubView.frame = CGRect(x: 20, y: 20, width: 100, height: 100)
mySubView.backgroundColor = UIColor.redColor()
blueView.addSubview(mySubView)

или если бы я добавил subпласт такой

let mySubLayer = CALayer()
mySubLayer.frame = CGRect(x: 20, y: 20, width: 100, height: 100)
mySubLayer.backgroundColor = UIColor.redColor().CGColor
blueView.layer.addSublayer(mySubLayer)

тогда я бы закончил с

enter image description here

теперь, если я не хочу, чтобы вещи висели за пределами границ, я могу сделать это

blueView.clipsToBounds = true

или это

blueView.layer.masksToBounds = true

что дает этот результат:

enter image description here

и clipsToBounds и masksToBounds are эквивалентно. Это просто, что первый используется с UIView и второй используется с CALayer.

см. также


как описано в этот блог, вот способ закругления углов UIView:

+(void)roundView:(UIView *)view onCorner:(UIRectCorner)rectCorner radius:(float)radius
{
    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:view.bounds
                                                   byRoundingCorners:rectCorner
                                                         cornerRadii:CGSizeMake(radius, radius)];
    CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
    maskLayer.frame = view.bounds;
    maskLayer.path = maskPath.CGPath;
    [view.layer setMask:maskLayer];
    [maskLayer release];
}

крутая часть заключается в том, что вы можете выбрать, какие углы вы хотите округлить.


вам нужно сначала импортировать файл заголовка <QuartzCore/QuartzCore.h>

 #import QuartzCore/QuartzCore.h>

[yourView.layer setCornerRadius:8.0f];
yourView.layer.borderColor = [UIColor redColor].CGColor;
yourView.layer.borderWidth = 2.0f;
[yourView.layer setMasksToBounds:YES];

не пропустите использовать -setMasksToBounds, в противном случае эффект может не отображаться.


вы можете использовать следующие пользовательские UIView класс, который также может изменять цвет и ширину границы. Как это IBDesignalbe вы также можете изменить атрибуты в interface builder.

enter image description here

import UIKit

@IBDesignable public class RoundedView: UIView {

    @IBInspectable var borderColor: UIColor = UIColor.white {
        didSet {
            layer.borderColor = borderColor.cgColor
        }
    }

    @IBInspectable var borderWidth: CGFloat = 2.0 {
        didSet {
            layer.borderWidth = borderWidth
        }
    }

    @IBInspectable var cornerRadius: CGFloat = 0.0 {
        didSet {
            layer.cornerRadius = cornerRadius
        }
    }

}

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(20, 50, 200, 200)];

view.layer.backgroundColor = [UIColor whiteColor].CGColor;
view.layer.cornerRadius = 20.0;
view.layer.frame = CGRectInset(v.layer.frame, 20, 20);

view.layer.shadowOffset = CGSizeMake(1, 0);
view.layer.shadowColor = [[UIColor blackColor] CGColor];
view.layer.shadowRadius = 5;
view.layer.shadowOpacity = .25;

[self.view addSubview:view];
[view release];

view.layer.cornerRadius = 25
view.layer.masksToBounds = true

пожалуйста, импортируйте Quartzcore framework тогда вы должны установить setMaskToBounds to TRUE это очень важная линия.

затем: [[yourView layer] setCornerRadius:5.0f];


UIView* viewWithRoundedCornersSize(float cornerRadius,UIView * original)
{
    // Create a white border with defined width
    original.layer.borderColor = [UIColor yellowColor].CGColor;
    original.layer.borderWidth = 1.5;

    // Set image corner radius
    original.layer.cornerRadius =cornerRadius;

    // To enable corners to be "clipped"
    [original setClipsToBounds:YES];
    return original;
}

Swift 4-Использование IBDesignable

   @IBDesignable
    class DesignableView: UIView {
    }

    extension UIView
    {

        @IBInspectable
        var cornerRadius: CGFloat {
            get {
                return layer.cornerRadius
            }
            set {
            layer.cornerRadius = newValue
        }
    }
}

сделайте это программно в obj c

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(20, 50,    200, 200)];

view.layer.backgroundColor = [UIColor whiteColor].CGColor;
view.layer.cornerRadius = 20.0;
view.layer.frame = CGRectInset(v.layer.frame, 20, 20);

[view.layer.shadowOffset = CGSizeMake(1, 0);
view.layer.shadowColor = [[UIColor blackColor] CGColor];
view.layer.shadowRadius = 5;
view.layer.shadowOpacity = .25;][1]

[self.view addSubview:view];

мы также можем сделать это из stoaryboard.

 layer.cornerRadius  Number  5

enter image description here


если круглый угол не работает в viewDidload () лучше писать код в viewDidLayoutSubview ()

-(void)viewDidLayoutSubviews
{
    viewTextfield.layer.cornerRadius = 10.0 ;                                               
    viewTextfield.layer.borderWidth = 1.0f;
    viewTextfield.layer.masksToBounds =  YES;
    viewTextfield.layer.shadowRadius = 5;
    viewTextfield.layer.shadowOpacity = 0.3;
    viewTextfield.clipsToBounds = NO;
    viewTextfield.layer.shadowOffset = CGSizeMake(0.0f, 0.0f);
}

надеюсь, что это помогает!


вы также можете использовать изображение:

UIImage *maskingImage = [UIImage imageNamed:@"bannerBarBottomMask.png"];
CALayer *maskingLayer = [CALayer layer];
maskingLayer.frame = CGRectMake(-(self.yourView.frame.size.width - self.yourView.frame.size.width) / 2
                                , 0
                                , maskingImage.size.width
                                , maskingImage.size.height);
[maskingLayer setContents:(id)[maskingImage CGImage]];
[self.yourView.layer setMask:maskingLayer];

установить свойство cornerRadious для круглого вида

set masksToBounds логическое значение для изображения по-прежнему не будет отображаться за пределами границы радиуса угла

view.layer.cornerRadius = 5;

view.layer.masksToBounds = YES;

Использование Расширения UIView:

extension UIView {    

func addRoundedCornerToView(targetView : UIView?)
{
    //UIView Corner Radius
    targetView!.layer.cornerRadius = 5.0;
    targetView!.layer.masksToBounds = true

    //UIView Set up boarder
    targetView!.layer.borderColor = UIColor.yellowColor().CGColor;
    targetView!.layer.borderWidth = 3.0;

    //UIView Drop shadow
    targetView!.layer.shadowColor = UIColor.darkGrayColor().CGColor;
    targetView!.layer.shadowOffset = CGSizeMake(2.0, 2.0)
    targetView!.layer.shadowOpacity = 1.0
}
}

использование:

override func viewWillAppear(animated: Bool) {

sampleView.addRoundedCornerToView(statusBarView)

}

на Xcode 6 Ваша попытка

     self.layer.layer.cornerRadius = 5.0f;

или

    self.layer.layer.cornerRadius = 5.0f;
    self.layer.clipsToBounds = YES;