我正在努力创造&使用一个非常简单的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”,但是当我运行应用程序时,矩形仍然有方角。我错过了一些明显的东西吗?
由于 乔纳森
答案 0 :(得分:23)
在iOS 5及更高版本中,绝对不需要子类 - 您可以从Interface Builder完成所有操作。
答案 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