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];
}
答案 0 :(得分:4)
那是因为你没有翻译它,当你使用CGAffineTransformMakeTranslation时,你说给我这些坐标而不是给我这个偏移。换句话说,make translation为您提供 identity 矩阵的翻译。你想要的功能是CGAffineTransformTranslate。这将将转换应用于当前转换(作为第一个参数传递)。
答案 1 :(得分:0)
转换属性不是累积的。你没有做你认为自己在做的事情。您正在从您的身份计算新变换,而不是从当前变换计算。
而不是:
CGAffineTransform moveLogo = CGAffineTransformMakeTranslation(0, 60);
self.logoImageView.transform = moveLogo;
尝试:
self.logoImageView.transform = CGAffineTransformIdentity;
答案 2 :(得分:-1)
您可能希望为简单的视图属性(如框架或大小)设置动画,而不是使用Core Graphics。例如:
[self.logoImageView.center = CGPointMake(self.logoImageView.center.x,
self.logoImageView.center.y + 60);
在beginAnimations
和commitAnimations