2

我手头有一个奇怪的问题。我有 UITextField。当点击按钮时,此 TextField 的宽度会调整大小。为此,我首先做了以下事情:

CGRect newbounds = originalBounds;
newbounds.size.width = newbounds.size.width/2;

[UIView beginAnimations:nil context:nil];
self.textField2.bounds = newbounds;
[UIView commitAnimations];

很简单,它奏效了。现在我继续前进并尝试对动画进行更多控制。为此,我使用以下内容进入 CABasicAnimation 的下一个级别:

CGRect newbounds = originalBounds;
newbounds.size.width = newbounds.size.width/2;

CABasicAnimation *animShrink = [CABasicAnimation animation];
animShrink.keyPath = @"bounds";
animShrink.toValue = [NSValue valueWithCGRect:newbounds];
animShrink.duration = 0.5;
animShrink.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
animShrink.delegate = self;

[self.textField2.layer addAnimation:animShrink forKey:@"shrink"];

那就是我在动画过程中遇到剪辑问题的时候,可以在以下位置看到:http ://coldstorage.macbonsai.com/public/cabasic_animation_clipping.png (因为根据 Stackoverflow,我“需要至少 10 个声望才能发布图像” )。

所以我尝试了以下版本的动画:

CGRect newbounds = originalBounds;
newbounds.size.width = newbounds.size.width/2;

CABasicAnimation *animShrink = [CABasicAnimation animation];
animShrink.keyPath = @"bounds.size.width";
animShrink.fromValue = [NSNumber numberWithFloat:originalBounds.size.width];
animShrink.toValue = [NSNumber numberWithFloat:newbounds.size.width];
animShrink.duration = 0.5;
animShrink.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
animShrink.delegate = self;

[self.textField2.layer addAnimation:animShrink forKey:@"shrink"];

还是遇到了同样的问题。此时,我从 UITextField 中删除了所有约束并尝试了 CABasicAnimation 版本。同样的问题。在这一点上,我不知道还能做什么。任何帮助将不胜感激。

提前谢谢了。

4

1 回答 1

0

如果您将按钮的样式更改为 UITextBorderStyleNone 它不会被剪裁。

我的猜测是,当样式为 UITextBorderStyleRoundedRect 时,Apple 可能只是将 UIImageView 添加到带有“圆形矩形”图像的按钮中,因此当您为按钮的图层设置动画时,它的子视图不会一起动画,因为在 iOS 中您必须明确动画所有子层。

于 2014-03-13T16:03:50.860 回答