0

iPad - iOS 5.1 - Xcode 4.3.2

当键盘弹出时,我将 UIImageView 的 y 原点动画设置为“x”当键盘关闭时,我将其动画返回相同的“x”

所以键盘弹出,图像上升X,键盘下降,图像下降x,但它不会在同一个地方结束!你上升 60,下降 60,你不在同一个地方!再往下,好像坐标系在键盘出现和消失之间发生了变化。它绝对让我发疯。我不明白为什么会这样。

//add gesture recognizer when keyboard appears
-(void)keyboardWillShow:(NSNotification *) note {

    [self.view addGestureRecognizer:tapRecognizer];

    // Setup the animation
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3f];
    [UIView setAnimationCurve:UIViewAnimationOptionCurveEaseInOut];
    [UIView setAnimationBeginsFromCurrentState:YES];

    // The transform matrix: Logo Image

    CGAffineTransform moveLogo = CGAffineTransformMakeTranslation(0, -60);
    self.logoImageView.transform = moveLogo;

    // Commit the changes
    [UIView commitAnimations];  
}

//add gesture recognizer when keyboard appears
-(void)keyboardWillHide:(NSNotification *) note {

    [self.view removeGestureRecognizer:tapRecognizer];

    // Setup the animation
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3f];
    [UIView setAnimationCurve:UIViewAnimationOptionCurveEaseInOut];
    [UIView setAnimationBeginsFromCurrentState:YES];

    // The transform matrix: Logo Image

    CGAffineTransform moveLogo = CGAffineTransformMakeTranslation(0, 60);
    self.logoImageView.transform = moveLogo;

    // Commit the changes
    [UIView commitAnimations];  
}
4

3 回答 3

4

那是因为你没有翻译它,当你使用 CGAffineTransformMakeTranslation 你说给我这些坐标而不是给我这个偏移量。换句话说,make translation 为您提供了单位矩阵的翻译。您想要的功能是 CGAffineTransformTranslate。这会将翻译应用于当前变换(作为第一个参数传递)。

于 2012-05-15T23:29:31.363 回答
0

变换属性不是累积的。你没有做你认为你正在做的事情。您正在根据您的身份计算新的转换,而不是从当前的转换。

代替:

   CGAffineTransform moveLogo = CGAffineTransformMakeTranslation(0, 60);
    self.logoImageView.transform = moveLogo;

尝试:

self.logoImageView.transform = CGAffineTransformIdentity;
于 2012-05-15T23:36:47.100 回答
-1

您可能想要为简单的视图属性设置动画,而不是使用 Core Graphics,例如框架或大小。例如:

[self.logoImageView.center = CGPointMake(self.logoImageView.center.x,
self.logoImageView.center.y + 60);

beginAnimations在和之间执行此操作commitAnimations

于 2012-05-15T23:33:58.363 回答