Ios 在自定义UIView中添加UILabel应该在drawRect或initWithFrame/自定义设置方法中吗
我不是一名全职的iOS开发人员,必须对其他人的代码进行一些更改。我们有一个自定义视图,其中在drawRect中添加了Ios 在自定义UIView中添加UILabel应该在drawRect或initWithFrame/自定义设置方法中吗,ios,Ios,我不是一名全职的iOS开发人员,必须对其他人的代码进行一些更改。我们有一个自定义视图,其中在drawRect中添加了UILabel,如下所示(为简洁起见进行了编辑): 我从未真正看到过这一点,并认为drawRect仅用于添加绘图操作(并且只看到了UIBezierPath)。是否应将其移动到initWithFrame(或常用的设置方法,如setupMyView)。还是可以在drawRect中离开?除了自定义图纸,drawRect中还有其他内容吗 很抱歉问了一个有点基本的问题,但即使是阅读苹果的文档
UILabel
,如下所示(为简洁起见进行了编辑):
我从未真正看到过这一点,并认为drawRect仅用于添加绘图操作(并且只看到了UIBezierPath
)。是否应将其移动到initWithFrame(或常用的设置方法,如setupMyView)。还是可以在drawRect中离开?除了自定义图纸,drawRect中还有其他内容吗
很抱歉问了一个有点基本的问题,但即使是阅读苹果的文档也会留下一些不尽如人意的地方 除非有很好的理由从drawRect方法中设置视图的子视图(我想不出任何子视图),否则我强烈建议将drawRect作为一种纯粹的绘图方法,并将addSubview的内容移出那里!我建议重写当前用于启动父视图的-init方法。例如:
-(instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:(CGRect)frame]) {
UILabel *myLabel=[[UILabel alloc] initWithFrame:CGRectMake(50.0f, 50.0f, 100.0f, 30.0f)];
myLabel.text=@"here is some text";
[self addSubview:myLabel];
}
return self;
}
除非有很好的理由在drawRect方法中设置视图的子视图(我想没有),否则我强烈建议将drawRect作为一种纯粹的绘图方法,并将addSubview的内容移出那里!我建议重写当前用于启动父视图的-init方法。例如:
-(instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:(CGRect)frame]) {
UILabel *myLabel=[[UILabel alloc] initWithFrame:CGRectMake(50.0f, 50.0f, 100.0f, 30.0f)];
myLabel.text=@"here is some text";
[self addSubview:myLabel];
}
return self;
}
除非有很好的理由在drawRect方法中设置视图的子视图(我想没有),否则我强烈建议将drawRect作为一种纯粹的绘图方法,并将addSubview的内容移出那里!我建议重写当前用于启动父视图的-init方法。例如:
-(instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:(CGRect)frame]) {
UILabel *myLabel=[[UILabel alloc] initWithFrame:CGRectMake(50.0f, 50.0f, 100.0f, 30.0f)];
myLabel.text=@"here is some text";
[self addSubview:myLabel];
}
return self;
}
除非有很好的理由在drawRect方法中设置视图的子视图(我想没有),否则我强烈建议将drawRect作为一种纯粹的绘图方法,并将addSubview的内容移出那里!我建议重写当前用于启动父视图的-init方法。例如:
-(instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:(CGRect)frame]) {
UILabel *myLabel=[[UILabel alloc] initWithFrame:CGRectMake(50.0f, 50.0f, 100.0f, 30.0f)];
myLabel.text=@"here is some text";
[self addSubview:myLabel];
}
return self;
}
我绝对不会在drawRect中做那样的事情。我过去使用的一种方法是将其添加到LayoutSubView,因为此时视图知道真实的边界/帧。您需要确保只生成一次视图内容,因为layoutSubviews会被多次调用,例如在旋转时。我通常执行以下操作,其中,
\u viewGenerated
是一个实例变量:
- (void)layoutSubviews {
[super layoutSubviews];
if (!_viewGenerated) {
[self generateView];
_viewGenerated = YES;
}
}
- (void)generateView {
// do everything with any labels, images, etc., here...
}
我绝对不会在drawRect中做那样的事情。我过去使用的一种方法是将其添加到LayoutSubView,因为此时视图知道真实的边界/帧。您需要确保只生成一次视图内容,因为layoutSubviews会被多次调用,例如在旋转时。我通常执行以下操作,其中,
\u viewGenerated
是一个实例变量:
- (void)layoutSubviews {
[super layoutSubviews];
if (!_viewGenerated) {
[self generateView];
_viewGenerated = YES;
}
}
- (void)generateView {
// do everything with any labels, images, etc., here...
}
我绝对不会在drawRect中做那样的事情。我过去使用的一种方法是将其添加到LayoutSubView,因为此时视图知道真实的边界/帧。您需要确保只生成一次视图内容,因为layoutSubviews会被多次调用,例如在旋转时。我通常执行以下操作,其中,
\u viewGenerated
是一个实例变量:
- (void)layoutSubviews {
[super layoutSubviews];
if (!_viewGenerated) {
[self generateView];
_viewGenerated = YES;
}
}
- (void)generateView {
// do everything with any labels, images, etc., here...
}
我绝对不会在drawRect中做那样的事情。我过去使用的一种方法是将其添加到LayoutSubView,因为此时视图知道真实的边界/帧。您需要确保只生成一次视图内容,因为layoutSubviews会被多次调用,例如在旋转时。我通常执行以下操作,其中,
\u viewGenerated
是一个实例变量:
- (void)layoutSubviews {
[super layoutSubviews];
if (!_viewGenerated) {
[self generateView];
_viewGenerated = YES;
}
}
- (void)generateView {
// do everything with any labels, images, etc., here...
}
把它放在一个普通的设置方法会更好。drawRect可以多次调用,最好不要使用它,除非您正在进行自定义绘图;当我看到它的时候,它看起来很不稳定。公平地说,只有真正的绘画。动画(如[UIView animateWithDuration]是否在drawRect中?thxNo,animateWithDuration也不应在drawRect中。最好将其放在常用的设置方法中。drawRect可以多次调用,除非您正在进行自定义drawing.thx(再次)操作,否则最好不要使用它@rdelmar;当我看到它的时候,它看起来真的很不稳定。公平地说,只有真正的绘画才会有动画(就像[UIView animateWithDuration]是否在drawRect中?thxNo,animateWithDuration也不应该在drawRect中。最好将其放在常用的设置方法中。drawRect可以多次调用,最好不要使用它,除非您正在进行自定义drawing.thx(再次)@rdelmar;当我看到它的时候,它看起来真的很不稳定。公平地说,只有真正的绘画才会有动画(就像[UIView animateWithDuration]是否在drawRect中?thxNo,animateWithDuration也不应该在drawRect中。最好将其放在常用的设置方法中。drawRect可以多次调用,最好不要使用它,除非您正在进行自定义drawing.thx(再次)@rdelmar;当我看到它时,它看起来真的很不稳定。公平地说,只有真实的绘图。动画(像[UIView animateWithDuration]一样)会在drawRect中吗?不,animateWithDuration也不应该在drawRect中。