制作动画以扩展和缩小 UIView

Posted

技术标签:

【中文标题】制作动画以扩展和缩小 UIView【英文标题】:Making an animation to expand and shrink an UIView 【发布时间】:2014-03-14 03:44:35 【问题描述】:

我想创建一个动画来调整 UIView 及其内容的大小。基本上,我想制作一个动画,首先扩展视图然后将其缩小回原始大小。

最好的方法是什么?我试过 CALayer.contentScale 但它什么也没做。

【问题讨论】:

与***.com/questions/5446899/…或***.com/questions/18329286/…有关? 【参考方案1】:

您可以像这样将一些动画块嵌套在一起:

目标-C:

[UIView animateWithDuration:1
                 animations:^
                     yourView.transform = CGAffineTransformMakeScale(1.5, 1.5);
                 
                 completion:^(BOOL finished) 
                     [UIView animateWithDuration:1
                                      animations:^
                                          yourView.transform = CGAffineTransformIdentity;
                                          
                                      ];
                 ];

斯威夫特 2:

UIView.animateWithDuration(1, animations:  () -> Void in
    yourView.transform = CGAffineTransformMakeScale(1.5, 1.5)
    )  (finished: Bool) -> Void in
        UIView.animateWithDuration(1, animations:  () -> Void in
            yourView.transform = CGAffineTransformIdentity
        )

斯威夫特 3/4/5:

UIView.animate(withDuration: 1, animations: 
    yourView.transform = CGAffineTransform(scaleX: 1.5, y: 1.5)
)  (finished) in
    UIView.animate(withDuration: 1, animations:  
        yourView.transform = CGAffineTransform.identity
    )

并用您自己的替换比例值和持续时间。

【讨论】:

【参考方案2】:

这是一个更小的方法,它也循环:

[UIView animateWithDuration:1
                      delay:0
                    options:UIViewKeyframeAnimationOptionAutoreverse | UIViewKeyframeAnimationOptionRepeat
                 animations:^
                     yourView.transform = CGAffineTransformMakeScale(1.5, 1.5);
                 
                 completion:nil];

选项UIViewKeyframeAnimationOptionRepeat 是让它循环的原因,如果你不想让它继续“呼吸”。动画块充当“吸气”,UIViewKeyframeAnimationOptionAutoreverse 选项自动播放“呼气”动画。

【讨论】:

【参考方案3】:

Swift 5 UIView 扩展:

extension UIView 
    func pulse(withIntensity intensity: CGFloat, withDuration duration: Double, loop: Bool) 
        UIView.animate(withDuration: duration, delay: 0, options: [.repeat, .autoreverse], animations: 
            loop ? nil : UIView.setAnimationRepeatCount(1)
            self.transform = CGAffineTransform(scaleX: intensity, y: intensity)
        )  (true) in
            self.transform = CGAffineTransform.identity
        
    

然后使用以下内容:

yourView.pulse(withIntensity: 1.2, withDuration: 0.5, loop: true)

只需确保将yourView 替换为您自己的视图即可。

【讨论】:

以上是关于制作动画以扩展和缩小 UIView的主要内容,如果未能解决你的问题,请参考以下文章

在 Flutter 中,您如何制作动画以将容器从 0 高度扩展到其内容的高度?

如何让一个脚本触发另一个 [jQuery] 缩小和扩展搜索框

iOS - UIView 动画的限制?

如何在 tableview 中为图像设置动画以同时扩展和打开另一个视图控制器?

iOS UIView drawRect 调整大小动画

如何在不制作 IBOutlet 的情况下以编程方式在 Swift 中为 UIView 高度约束设置动画?