デバイスでアプリケーションをテストしているときに、非常に奇妙な問題が発生します。ナビゲーションコントローラーに接続された2つのビューがあります。私の最初のビューは非常にシンプルで、UIButtonが1つあります。このボタンをクリックすると、2番目のビューに切り替わります。2番目のビューには、プログラムで作成されたUIButton(> 20)があります。問題があります。私の切り替えアニメーションの動作が(本来よりも)遅くなり、スパートが発生します。多くのUIButtonを使用して同じviewControllerを作成しようとしましたが、Interface Builderを使用して、アニメーションが正しく機能しています。この問題は、実際のデバイスでアプリケーションをテストしているときにのみ発生します。シミュレーターでは、このすべてのバリアントが正常に機能します。UI要素を作成するこの2つのバリエーションにいくつかの違いはありますか?そして、プログラムで多くのUI要素を使用してビューを作成することでこの問題をどのように解決できますか(私はこの方法を好みます)。
Edit1 スーパークラスがUIButtonであるクラスがあります。実装は次のとおりです。
#import <QuartzCore/QuartzCore.h>
#import "UIHouseButtons.h"
@implementation UIHouseButtons
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self = [UIButton buttonWithType:UIButtonTypeRoundedRect];
UIImage *buttonImageNormal = [UIImage imageNamed:@"stateNormal.png"];
UIImage *strechableButtonImageNormal = [buttonImageNormal stretchableImageWithLeftCapWidth:12 topCapHeight:0];
[self setBackgroundImage:strechableButtonImageNormal forState:UIControlStateNormal];
UIImage *buttonImagePressed = [UIImage imageNamed:@"stateNormal.png"];
UIImage *strechableButtonImagePressed = [buttonImagePressed stretchableImageWithLeftCapWidth:12 topCapHeight:0];
[self setBackgroundImage:strechableButtonImagePressed forState:UIControlStateHighlighted];
[[self layer] setCornerRadius:4.0f];
[[self layer] setMasksToBounds:YES];
[self.titleLabel setFont:[UIFont fontWithName:@"Times New Roman" size:15.0f]];
self.frame = frame;
}
return self;
}
メソッドの2番目のViewControllerで-loadView
:
UIHouseButtons *homeButton = [[UIHouseButtons alloc] initWithFrame:CGRectMake(435.0f, 5.0f, 40.0f, 25.0f)];
[homeButton setTitle:@"H" forState:UIControlStateNormal];
[self.view addSubview:homeButton];
そして同じ20回。
編集2UIButtonsクラスを編集しました。
- (id)init
{
self = [super init];
if (self) {
self = [UIButton buttonWithType:UIButtonTypeRoundedRect];
//self.backgroundColor = [UIColor clearColor];
UIImage *buttonImageNormal = [UIImage imageNamed:@"stateNormal.png"];
UIImage *strechableButtonImageNormal = [buttonImageNormal stretchableImageWithLeftCapWidth:12 topCapHeight:0];
[self setBackgroundImage:strechableButtonImageNormal forState:UIControlStateNormal];
UIImage *buttonImagePressed = [UIImage imageNamed:@"stateNormal.png"];
UIImage *strechableButtonImagePressed = [buttonImagePressed stretchableImageWithLeftCapWidth:12 topCapHeight:0];
[self setBackgroundImage:strechableButtonImagePressed forState:UIControlStateHighlighted];
[[self layer] setCornerRadius:4.0f];
[[self layer] setMasksToBounds:YES];
[self.titleLabel setFont:[UIFont fontWithName:@"Times New Roman" size:15.0f]];
self.layer.shouldRasterize = YES;
self.layer.rasterizationScale = [[UIScreen mainScreen] scale];
}
return self;
}
私の-viewDidLoad
:
- (void)viewDidLoad
{
[super viewDidLoad];
self.button1 = [[UIHouseButtons alloc] init];
self.button2 = [[UIHouseButtons alloc] init];
self.button3 = [[UIHouseButtons alloc] init];
self.button4 = [[UIHouseButtons alloc] init];
//and more 20 times
[self.view addSubview:self.button1];
[self.view addSubview:self.button2];
[self.view addSubview:self.button3];
[self.view addSubview:self.button4];
//and more 20 times
}
私のviewWillAppear
:
-(void)viewWillAppear:(BOOL)animated {
[self.button1 setFrame:CGRectMake(13.0f, 5.0f, 30.0f, 30.0f)];
[self.button2 setFrame:CGRectMake(57.0f, 5.0f, 30.0f, 30.0f)];
[self.button3 setFrame:CGRectMake(99.0f, 5.0f, 30.0f, 30.0f)];
[self.button4 setFrame:CGRectMake(141.0f, 5.0f, 30.0f, 30.0f)];
//and more 20 times
[super viewWillAppear:animated];
}