UIModalTransitionStyle Partial Curl对iOS 5中的子类元素表现异常

时间:2012-09-11 20:23:01

标签: iphone uimodaltransitionstyle

我有UIModalTransitionStylePartialCurl表现得很时髦。我的观看次数UILabelUIButton的动画效果就像标签框架一直在变化一样。

在iOS 4或6中,它可以静态工作。我制作了一个关于错误on youtube的视频。

我找到了answer to this problem,但我不太了解其实施情况。我在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]];

}

1 个答案:

答案 0 :(得分:1)

看起来视图框架的设置会被部分页面卷曲动画创建的CATransaction捕获并被动画化。由于帧至少在你发布的代码中不应该是CGRectZero,这似乎是iOS 5中的一个错误。特别是基于answer you linked收到的上传票数。这个答案很好地描述了这个问题。

基本上,如果强制新视图通过调用[self layoutIfNeeded]立即将其自身展开,则会强制视图系统意识到这些是当前帧值而不是要动画化的值。然后,即使这个bug仍然试图动画它是非操作。从帧A到帧A的动画是最不可察觉的。而且由于“越野车”动画会在卷曲动画的同时完成,它实际上(实际上)对你来说无关紧要。除了layoutIfNeeded中对viewDidLoad的无法理解的调用。