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 搜索图标和占位符文本动画