UISearchBar 宽度动画和 AutoLayout

Posted

技术标签:

【中文标题】UISearchBar 宽度动画和 AutoLayout【英文标题】:UISearchBar width animation and AutoLayout 【发布时间】:2013-02-23 16:11:33 【问题描述】:

我在尝试为 UISearchBar 设置动画以在编辑时简单展开时遇到了大量问题,所以我想我会为遇到此问题的其他人提供解决方案。

已经有 problems 为 UISearchBar 设置动画,并且在将其与 ios AutoLayout 混合时问题会进一步增加。如果您有同样的问题,那么我在下面发布了解决方案。它可能并不完美,但确实有效。

【问题讨论】:

这是如何在swift中实现这一点***.com/a/29565613/2683201 【参考方案1】:

经过多次试验和错误,我通过在 xib 中关闭 AutoLayout 功能,然后使用下面的动画方法让它工作:

+(CAAnimationGroup *)changeView:(UIView *)view frameTo:(CGRect)frame
CGRect oldFrame = view.frame;

// /2.0 because size animation occurs from the anchor point which is set to (0.5,0.5) by default
CGPoint oldOrigin = CGPointMake(oldFrame.origin.x+oldFrame.size.width/2.0, oldFrame.origin.y+oldFrame.size.height/2.0);
CGPoint newOrigin = CGPointMake(frame.origin.x+frame.size.width/2.0, frame.origin.y+frame.size.height/2.0);

CABasicAnimation *positionAnimation = [CABasicAnimation animationWithKeyPath:@"position"];

positionAnimation.fromValue = [NSValue valueWithCGPoint:oldOrigin];
positionAnimation.toValue = [NSValue valueWithCGPoint:newOrigin];
view.layer.position = newOrigin;

CABasicAnimation *sizeAnimation = [CABasicAnimation animationWithKeyPath:@"bounds"];

sizeAnimation.fromValue = [NSValue valueWithCGRect:oldFrame];
sizeAnimation.toValue = [NSValue valueWithCGRect:frame];
view.layer.bounds = frame;

CAAnimationGroup *frameChangeAnimationGroup = [CAAnimationGroup animation];

frameChangeAnimationGroup.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
frameChangeAnimationGroup.animations = [NSArray arrayWithObjects:positionAnimation,sizeAnimation, nil];

[view.layer addAnimation:frameChangeAnimationGroup forKey:@"frame"];

return frameChangeAnimationGroup;

我希望这能帮助人们并减轻我必须经历的一些痛苦。

【讨论】:

以上是关于UISearchBar 宽度动画和 AutoLayout的主要内容,如果未能解决你的问题,请参考以下文章

在 becomeFirstResponder 上禁用 UISearchBar 搜索图标和占位符文本动画

UISearchBar 与状态栏动画过渡错误 ios7

UISearchBar:奇怪的扩展动画

自定义 UISearchController 动画

UINavigationBar 中的 UISearchBar 在旋转方向时改变宽度

修改 UITableView 标头中的 UISearchBar 宽度