Предоставление 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
.
вы не сможете увидеть эффект в раскадровке, потому что эти параметры оцениваются во время выполнения.
теперь вы можете использовать категорию swift в UIView (код ниже изображения) в with @IBInspectable, чтобы показать результат на раскадровке (если вы используете категорию, используйте только cornerRadius, а не слой.cornerRadius как ключевой путь.
extension UIView {
@IBInspectable var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
layer.masksToBounds = newValue > 0
}
}
}
другой подход, чем тот, который сделал Эд Марти:
#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)
вы можете дать ему круглые углы изменение cornerRadius
свойство вида layer
.
blueView.layer.cornerRadius = 8
большие значения радиуса дают более закругленные углы
blueView.layer.cornerRadius = 25
и меньшие значения дают меньше закругленными углами.
blueView.layer.cornerRadius = 3
это может быть достаточно, чтобы решить вашу проблему прямо там. Однако иногда представление может иметь подвида или подслоя это выходит за пределы видимости. Например, если бы я добавил 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)
тогда я бы закончил с
теперь, если я не хочу, чтобы вещи висели за пределами границ, я могу сделать это
blueView.clipsToBounds = true
или это
blueView.layer.masksToBounds = true
что дает этот результат:
и 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.
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];
пожалуйста, импортируйте 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
если круглый угол не работает в 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;