iOS - 为圆角矩形创建UIView子类

时间:2012-04-17 11:51:43

标签: objective-c ios uiview storyboard subclass

我正在努力创造&使用一个非常简单的UIView子类用于带圆角的矩形。我创建了一个新类,如下所示:

RoundedRect.h

#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>

@interface RoundedRect : UIView
@end

RoundedRect.m

#import "RoundedRect.h"

@implementation RoundedRect

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        [[self layer] setCornerRadius:10.0f];
        [[self layer] setMasksToBounds:YES];
    }
    return self;
}
@end

我正在使用带有故事板的iOS 5.1并将IB检查器窗口中的自定义类属性设置为“RoundedRect”,但是当我运行应用程序时,矩形仍然有方角。我错过了一些明显的东西吗?

由于 乔纳森

5 个答案:

答案 0 :(得分:23)

在iOS 5及更高版本中,绝对不需要子类 - 您可以从Interface Builder完成所有操作。

  1. 选择您要修改的UIView。
  2. 转到Identity Inspector。
  3. 在“用户定义和运行时属性”中,在“密钥路径”中添加“layer.cornerRadius”,“类型”应为“数字”以及您需要的任何设置。
  4. 同时将'layer.masksToBounds'添加为布尔值。
  5. 完成!没有子类化,全部都在IB中。

答案 1 :(得分:18)

其他人已经回答了这个问题,但我会像这样重构它以便在nib和代码中使用

#import "RoundedRect.h"

@implementation RoundedRect

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

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

- (void)commonInit;
{
    CALayer *layer = self.layer;
    layer.cornerRadius  = 10.0f;
    layer.masksToBounds = YES;
}

@end

答案 2 :(得分:10)

从XIB文件实例化视图时,不会调用initWithFrame方法。相反,调用initWithCoder:初始化程序,因此您需要在此方法中执行相同的初始化。

答案 3 :(得分:3)

对于从NIB文件加载的视图,指定的初始值设定项为initWithCoder:。在这种情况下,不会调用initWithFame:

答案 4 :(得分:0)

如果从Nib加载UIView,则应使用方法

- (void)awakeFromNib