我有一个自定义按钮,来自UIButton的子类,初始化如下(显然所有按钮都使用自定义字体)。
@implementation HWButton
- (id)initWithCoder:(NSCoder *)decoder {
if (self = [super initWithCoder: decoder]) {
[self.titleLabel setFont:[UIFont fontWithName: @"eraserdust" size: self.titleLabel.font.pointSize]];
}
return self;
}
到目前为止一切顺利。但是当我在我的笔尖中使用自定义类并启动应用程序时,该按钮最初显示为一小段文本,然后增长。所以结果就是我想要的,但我不希望看到过渡。有谁能把我弄好吗?
感谢。 JP
答案 0 :(得分:0)
我没有看到这个问题,但听起来按钮的初始框架是小的。当按钮从笔尖加载时,它会使用笔尖中指定的框架绘制自己。只有在启动和运行后才能自行调整其他因素。
更改字体大小不是通常在初始化期间完成的,它有很多副作用,因此在按钮完全初始化之前,类可能会忽略sizeToFit。
我认为最简单的方法是将IB中的帧设置为您想要使用的字体所具有的帧。这样,你根本看不到过渡。
如果按钮在绘制后不必更改大小,我建议使用图像而不是文本。只需拨打一个Gimped按钮即可完成。
答案 1 :(得分:0)
以下是我正在做的一个例子:
在调用ViewController中,我使用以下代码切换视图:
-(void)selectProfile:(User*)selectedUser{
SelectGameViewController* selectGame=[[SelectGameViewController alloc]initWithNibName:@"SelectGame" bundle:nil];
UIView* parent=self.view.superview;
[UIView beginAnimations:@"Show selection" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
[UIView setAnimationDuration:0.50f];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:parent cache:YES];
[selectGame viewWillAppear:YES];
[self viewWillDisappear:YES];
[parent insertSubview:selectGame.view atIndex:0];
[self.view removeFromSuperview];
[selectGame viewDidAppear:YES];
[self viewDidDisappear:YES];
[UIView commitAnimations];
}
然后在出现的视图中,我在-viewWillAppear方法中有以下代码:
-(void)viewWillAppear:(BOOL)animated{
UIButton* newButton=[[UIButton alloc]initWithFrame:CGRectMake(50, 150, 500, 150)];
[newButton setTitle:@"Play" forState:UIControlStateNormal];
[newButton setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[newButton.titleLabel setFont:[UIFont fontWithName:@"EraserDust" size:80]];
[newButton addTarget:self action:@selector(playGame:) forControlEvents:UIControlEventTouchUpInside];
newButton.transform = CGAffineTransformMakeRotation(-.2);
[self.view addSubview:newButton];
[newButton release];
[super viewWillAppear:animated];
}
结果是视图出现时按钮未旋转,但在显示后立即旋转。我很困惑,因为这似乎与TechZen的建议不一致?