【问题标题】:UIModalTransitionStylePartialCurl acting strange with subclassed elements in iOS 5UIModalTransitionStylePartialCurl 在 iOS 5 中对子类元素表现得很奇怪
【发布时间】:2012-09-11 20:23:01
【问题描述】:

我有一个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]];

}

【问题讨论】:

  • 您不能只创建一个自定义过渡类。我建议你学习如何,因为它也可以在未来帮助你。

标签: iphone uimodaltransitionstyle


【解决方案1】:

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

本质上,如果您通过调用[self layoutIfNeeded] 来强制新视图立即布局,它会强制视图系统意识到这些是当前帧值而不是动画到的那些值。然后即使这个错误仍然试图动画它是一个非操作。从 A 帧到 A 帧的动画最糟糕的是难以察觉。而且由于“buggy”动画将与 curl 动画同时完成,因此(实际上)对您而言并不重要。除了在viewDidLoad 中莫名其妙地调用layoutIfNeeded

【讨论】:

  • 我可以在设置完所有子视图后致电[self layoutIfNeeded]; 确认此问题已消失。我在视图中设置了几个断点以进行更多挖掘,看起来模态视图的 viewDidLoad 方法被调用了两次 - 一次是在动画开始之前,一次是在动画结束时。
猜你喜欢
  • 2013-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
  • 2011-02-04
  • 1970-01-01
  • 2014-12-12
相关资源
最近更新 更多