如何在iOS中实现矩形UIButton到圆形的漂亮动画?

Posted

技术标签:

【中文标题】如何在iOS中实现矩形UIButton到圆形的漂亮动画?【英文标题】:How to implement nice animation for rectangle UIButton to circle shape in iOS? 【发布时间】:2015-09-11 05:27:15 【问题描述】:

当我点击“登录”按钮时,我需要制作我的矩形登录按钮 Login Screenshot 动画并将其形状更改为圆形,如下面的链接 Login Button after i click

我在 *** 中看到了这段代码,但它没有按我想要的方式工作

    CGFloat width = self.login.frame.size.width;
CABasicAnimation *morph = [CABasicAnimation animationWithKeyPath:@"cornerRadius"];
morph.fromValue = @0;
morph.toValue = @(width/2);
morph.duration = 0.5;
[self.login.layer addAnimation:morph forKey:@"morph"];
self.login.layer.cornerRadius = width/2;

请帮忙

感谢您回答这个问题。

这是最终代码

[UIView animateWithDuration:0.5
                          delay:0.0
                        options:UIViewAnimationCurveLinear
                     animations:^
                         self.layoutWidth.constant = 70;
                         [self.view layoutIfNeeded];
                         self.btnLogin.clipsToBounds = YES;
                         self.btnLogin.layer.cornerRadius =self.btnLogin.bounds.size.height/2.0f;

                     
                     completion:^(BOOL finished)


                     ];

【问题讨论】:

【参考方案1】:

试试这个,

Demo Animation

代码:

- (IBAction)clicklogin:(id)sender 

    [UIView animateWithDuration:0.1
                          delay:1.0
                        options:UIViewAnimationCurveLinear
                     animations:^
                         self.layoutWidth.constant = 70;
                         [self.view layoutIfNeeded];

                     
                     completion:^(BOOL finished)


                         NSLog(@"Done!");

                         [UIView animateWithDuration:0.1
                                               delay:0.0
                                             options:UIViewAnimationCurveLinear
                                          animations:^
                                              self.btnLogin.clipsToBounds = YES;
                                              self.btnLogin.layer.cornerRadius =self.btnLogin.bounds.size.height/2.0f; //or use ( self.login.bounds.size.height/2);
                                              self.btnLogin.layer.borderColor=[UIColor redColor].CGColor;
                                              self.btnLogin.layer.borderWidth=2.0f;

                                              [self.view layoutIfNeeded];

                                          
                                          completion:^(BOOL finished)


                                              NSLog(@"Done!");

                                          ];


                     ];


输出:

【讨论】:

下载demo代码,按钮宽度布局, Demo动画下载学习 好的,我明白了。它的工作也很感谢,但我可以稍微延迟一下看看从矩形到圆形的过渡。我试图改变你在代码中给出的动画延迟,但不影响那个时间 延迟1.0,点击按钮后1.0开始动画,第二次延迟0.0,因为动画继续,不需要延迟所以放0.0, 我已经对您的代码进行了一些更改,现在它的工作很酷,请检查更新的代码【参考方案2】:

这个怎么样?

 [UIView animateWithDuration:1.0 animations:^
        CGRect frame = btn.frame;
        CGPoint center = btn.center;
        frame.size.width = btn.frame.size.height;
        frame.size.height = btn.frame.size.height;

        btn.frame = frame;
        btn.center = center;
        btn.layer.cornerRadius = frame.size.width/2;
        btn.clipsToBounds = YES;

    ];

这就是我得到的

在 1 秒的动画之后,我得到了这个

【讨论】:

不幸的是,您的代码也无法正常工作s13.postimg.org/6y6t2y5rr/image.png 现在应该可以工作了,我把角半径写错了高度,它将是宽度。 我编辑了从高度到宽度/2的角半径,它对我来说非常好,因为你可以看到截图【参考方案3】:

如果你想得到圈子,只需简单的方法

-(IBAction)actionClick:(id)sender
  
  [UIView animateWithDuration:0.7f
                 animations:^
  
     [sender setAlpha:0.5f];
  
                 completion:^(BOOL finished)
  
     [sender setAlpha:1.0f];
     button.layer.cornerRadius = button.frame.size.width / 2;
     button.layer.borderColor=[UIColor redColor].CGColor;
     button.layer.borderWidth=2.0f;
    ];
  

【讨论】:

以上是关于如何在iOS中实现矩形UIButton到圆形的漂亮动画?的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 中实现收藏按钮

Android 自定义漂亮的圆形进度条

如何在 iOS 中像 UITabBarItem 一样设计 UIButton?

如何在 iPhone 应用程序中实现 UIButton / UILabel 'padding'

如何在 iPhone 应用程序中实现半圆形按钮

如何在不重叠的情况下在 UIButton 中实现两个 IBAction?