0

UIModalTransitionStylePartialCurlファンキーな演技をしている人がいます。ラベルのフレームが常に変更されているかのように、私のビューUILabelとアニメーションを作成します。UIButton

iOS 4または6では、静的に機能します。私はyoutubeでバグのビデオを作りました。

この問題に対する答えを見つけましたが、実装についてはよくわかりません。すべての要素をviewDidLoadに割り当てて初期化するので、正確には[self layoutIfNeeded];どこで役立ちますか?

私のコードは、関連する場合、次のとおりです(リファクタリング):

- (void)viewDidLoad
{
[super viewDidLoad];


// Label
textLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 120, 280, 40)];
textLabel.text = @"Change password";
[self.view addSubview: textLabel];

// old password
oldPassword = [[UITextField alloc] initWithFrame: CGRectMake(20, 180, 280, 40)];
oldPassword.secureTextEntry = YES;
oldPassword.placeholder = @"Current Password";
oldPassword.returnKeyType = UIReturnKeyNext;
oldPassword.autocapitalizationType = UITextAutocapitalizationTypeNone;
oldPassword.delegate = self;
[self.view addSubview: oldPassword];

// New password
CGRect chosenPasswordFrame = oldPassword.frame;
chosenPasswordFrame.origin.y += 40;
chosenPassword = [[CustomTextField alloc] initWithFrame: chosenPasswordFrame];
chosenPassword.secureTextEntry = YES;
chosenPassword.placeholder = @"New Password";
chosenPassword.returnKeyType = UIReturnKeyGo;
chosenPassword.autocapitalizationType = UITextAutocapitalizationTypeNone;
chosenPassword.delegate = self;
[self.view addSubview: chosenPassword];

// Submit button
submitButton = [[UIButton alloc] initWithFrame:CGRectMake(20, chosenPasswordFrame.origin.y + chosenPasswordFrame.size.height + 20, self.view.frame.size.width - 40, 45)];
[submitButton setTitle:@"Submit" forState:UIControlStateNormal];
[submitButton addTarget:self action:@selector(changePassword) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview: submitButton];

self.view.backgroundColor = [UIColor colorWithPatternImage:[[AppTheme sharedTheme] changePasswordBackgroundImage]];

}
4

1 に答える 1

1

CATransactionビューのフレームの設定が、部分的なページカールアニメーションによって作成され、アニメーション化されていることに巻き込まれているようです。CGRectZeroフレームは少なくともあなたが投稿したコードに含まれるべきではなかったので、これはiOS 5のバグのようです。特に、リンクした回答が受け取った賛成票の数に基づいています。そして、その答えは問題をよく説明しています。

基本的に、新しいビューを呼び出すことですぐにレイアウトするよう[self layoutIfNeeded]に強制すると、ビューシステムは、これらがアニメーション化されるフレーム値ではなく、現在のフレーム値であることを認識します。そして、このバグがまだアニメーション化しようとしても、それは非動作です。フレームAからフレームAへのアニメーションは、最悪の場合、知覚できません。また、「バギー」アニメーションはカールアニメーションと同時に終了するため、実際には(実際には)問題にはなりません。の不可解な呼び出しを除いlayoutIfNeededviewDidLoad

于 2012-09-11T21:41:23.760 に答える