iPhone アプリでは、1 つのビューに多数の UIButton (約 60 個のボタンなど) があります。ボタンの外観をカスタマイズするために、次の方法を使用しています。
- (void) setButtonAttributes:(UIButton *) buttonName withTitle:(NSString *)title withImage:(NSString *) imageSuffix
{
NSString *unpressedName, *pressedName;
pressedName = [NSString stringWithFormat:@"pressed%@.png", imageSuffix];
unpressedName = [@"un" stringByAppendingString: pressedName];
buttonName.layer.cornerRadius = 5;
buttonName.clipsToBounds = YES;
[buttonName setTitle:title forState:UIControlStateNormal];
if ([imageSuffix isEqualToString:@""] || [imageSuffix isEqualToString:@"brown"] || [imageSuffix isEqualToString:@"green"])
{
buttonName.titleLabel.font = [UIFont boldSystemFontOfSize:15];
[buttonName setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[buttonName setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted];
[buttonName setBackgroundImage:[UIImage imageNamed:unpressedName] forState:UIControlStateNormal];
[buttonName setBackgroundImage:[UIImage imageNamed:pressedName] forState:UIControlStateHighlighted];
}
else
{
[buttonName setImage:[UIImage imageNamed:unpressedName] forState:UIControlStateNormal];
[buttonName setImage:[UIImage imageNamed:pressedName] forState:UIControlStateHighlighted];
}
[buttonName addTarget:self action:@selector(playClick) forControlEvents:UIControlEventTouchDown];
}
したがって、ビューの - (void)viewDidLoad でこのメソッドを約 60 回呼び出しています。例えば:
[self setButtonAttributes:firstButton withTitle:@"First" withImage:@"brown"];
一部のボタンは IB に表示されます。しかし、IB では表示されないボタンもあるため、以下を使用して表示しています。
secondButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
secondButton.frame = CGRectMake(64, 394, BUTTOM_WIDTH, BUTTOM_HEIGHT);
secondButton.bounds = CGRectMake(0, 0, BUTTOM_WIDTH, BUTTOM_HEIGHT);
[self setButtonAttributes:secondButton withTitle:@"Second" withImage:@"brown"];
[secondButton addTarget:self action:@selector(someSelector) forControlEvents:UIControlEventTouchUpInside];
[somePane addSubview:secondButton]; //somePane is a scrollview.
これらの 60 個のボタンはすべて、ビューのヘッダー ファイルで IBOutlet が定義されています。例えば:
IBOutlet UIButton *firstButton;
私のアプリと、たとえば iPhone の電卓アプリを比較すると、iPhone の電卓の方が私のアプリよりもボタンがはるかにきびきびしていることに気付きました。基本的に、私の問題は、アプリのボタンの応答時間が iPhone の電卓に比べてはるかに遅いことです。上記のコードで説明したように、ボタンをカスタマイズした方法と関係があるのでしょうか? もしそうなら、これらの多くのボタンをカスタマイズする正しい方法は何ですか?