【问题标题】:UIView animateWithDuration... not working in iOS 8UIView animateWithDuration... 在 iOS 8 中不起作用
【发布时间】:2015-03-29 11:36:53
【问题描述】:

当键盘启动时尝试为按钮设置动画时,我遇到了 [UIView animationWithDuration] 的问题。我有一个通知告诉我键盘何时出现,然后我让 ViewController 在视图中调用此方法。按钮动画但不正确。它只是从屏幕上的随机位置动画到之前的位置。我再次提出这个问题的原因是因为我已经看到其他帖子的答案说在 ViewController 中将视图的 translatesAutoresizingMaskIntoConstraints 属性设置为 YES 可以解决问题,但不能解决问题。

    [self.view setTranslatesAutoresizingMaskIntoConstraints:YES];

动画如下:

- (void)animateForKeyboardAppearanceWithKeyboardSize:(CGSize)keyboardSize; {
    [UIView animateWithDuration:0.3f
                 animations:^{
                     [self.sendSMSButton setFrame:CGRectMake(0,
                                                             self.frame.size.height - keyboardSize.height - self.sendSMSButton.frame.size.height,
                                                             self.frame.size.width,
                                                             self.sendSMSButton.frame.size.height)];
                 }];
}

有人知道发生了什么吗?提前致谢。

【问题讨论】:

  • 你使用自动布局吗?如果是这样,您最好在动画块中设置NSLayoutConstraintconstant 属性。然后调用updateConstraintsIfNeeded
  • 如果您不使用Autoloayout,则没有理由使用setTranslatesAutoresizingMaskIntoConstraints:。你在哪里打电话给animateForKeyboardAppearanceWithKeyboardSize:
  • 我没有使用笔尖,所以我认为这不适用于这里。不过感谢您的回复。
  • 当收到键盘即将出现的通知时,我在视图控制器中调用animateForKeyboardAppearanceWithKeyboardSize:- (void)keyboardWillShow:(NSNotification *)notification { NSDictionary *userInfo = [notification userInfo]; CGSize keyboardSize = [[userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; [self.createAccountView animateForKeyboardAppearanceWithKeyboardSize:keyboardSize]; }
  • 一旦你弄清楚了这一点,你可能想看看这里找到的一些想法来改进你的动画。 stackoverflow.com/questions/18837166/…

标签: ios objective-c xcode animation ios8


【解决方案1】:

您是否确保不会重复调用此方法?还可以尝试对按钮进行子类化,覆盖 -setFrame 并仔细检查在您尝试为按钮设置动画时是否有其他东西在设置按钮的框架。

【讨论】:

  • 该函数只被调用一次。事实是,每当我设置框架(在动画块内部或外部)时,按钮都会以相同的方式(不正确)进行动画处理。调整所有其他视图的大小时也会发生这种情况。
  • 按钮有什么特别有趣的地方吗,比如变换?也许尝试用简单的彩色 UIView 替换它。
  • 按钮是绿色背景下的白色。即使我将其框架设置为 CGRectMake(0,0,100,100); (即使在动画块之外),按钮将保持在相同的位置,并且不会按照它的指示进行操作。
  • 你是否改变了按钮的层,或者其他类似的东西?我认为您将不得不开始寻找单个按钮之外的答案。
猜你喜欢
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-05
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 2014-03-17
相关资源
最近更新 更多