有没有办法设置子类CGPoint本身?

时间:2018-03-23 04:08:15

标签: ios objective-c uiviewcontroller uilabel

UILabel的子类名为NewLabel,它将在很多UIViewControllers中显示,例如

NewLabel *label = [[NewLabel alloc] init];
CGSize size = CGSizeMake(120.0f, 40.0f);
CGPoint point = CGPointMake(self.view.bounds.size.width / 2, self.view.bounds.size.height / 2);
label.frame = CGRectMake(0, 0, size.width, size.height);
label.center = point;
[self.view addSubview:label];

在每个UIViewController中,我需要放置这些代码,我可以压缩代码,并将一些放在子类NewLabel中吗?有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您可以在NewLabel类或其他类中创建一些具有下一个结构的静态工厂方法:

+ (NewLabel*)addLabelIntoView:(UIView*)view
{
   NewLabel *label = [[NewLabel alloc] init];
   CGSize size = CGSizeMake(120.0f, 40.0f);
   CGPoint point = CGPointMake(view.bounds.size.width / 2, view.bounds.size.height / 2);
   label.frame = CGRectMake(0, 0, size.width, size.height);
   label.center = point;
   [view addSubview:label];
   return label;
}

添加标签只是调用此方法:

<....>
self.label = [NewLabel addLabelIntoView:self.view]

答案 1 :(得分:0)

看起来你在这里尝试做两件事:

1)为标签设置一个恒定的大小。 2)将标签置于其超级视图中。

我会分别处理这两件事。

对于第一个(设置大小),它取决于目的。 (120,40)对我来说很随意。如果文本在不同语言中超过120px怎么办?如果我想在设置中增加iOS字体大小并且它变得高于40px怎么办?如果我在分屏中缩小屏幕怎么办?如果您不确定,可能使用sizeToFit或自动布局是一种解决方案。如果您完全确定大小,可能会将其移至NewLabel的intrinsic content size

对于标签居中,它是自动布局的完美用例。 See this answer。此解决方案可以作为实用方法提取,如centerViewInSuperview

另一种解决方案是将位于中心的标签的整个概念实际提取到单独的UIView中,该UIView在中间包含该标签。然后在您的代码中,您将使用该视图,并将其填充到整个视图控制器的视图中(还可以添加将其边框附加到父边框的约束,以用于调整旋转时的大小)。