将UIButton动画为全屏

时间:2016-01-05 21:36:10

标签: ios objective-c animation uibutton

所以我有一个非常简单的按钮,当点击进入全屏时再次点击它会回到它最初所处的相同位置。出于某种原因,它在没有动画的情况下完美运行。当我最初点击按钮时取消注释动画部分它什么也没做,第二次我点击它稍微放大。我第三次点击它动画缓慢但回到原来的尺寸较小......为什么它以相反的方式制作动画?

- (IBAction)viewImage1:(id)sender {
    UIButton *btn = (UIButton*) sender;
    if (btn.tag == 0)
    {
        CGRect r = [[UIScreen mainScreen] bounds];
        /*[UIView animateWithDuration:0.5f delay:0.0f options:0 animations:^{*/
        [sender setFrame: r];
        /*}completion:nil];*/
        btn.tag = 1;
    }
    else
    {
        btn.tag = 0;

        [sender setFrame:CGRectMake(0,0,370,200)];
    }
}

2 个答案:

答案 0 :(得分:2)

您的问题有两种解决方案可以使用:

  1. 禁用Autolayout。 (泄气)
    您可以通过打开文件检查器在Interface Builder中执行此操作

    File Inspector

    在右侧窗格中取消选中相应的复选框。

    Disable Autolayout

    但是,如果您想使用Autolayout来约束视图中的其他UI元素(在大多数情况下这是一个非常好的主意),这种方法将不起作用,这就是我推荐第二种解决方案的原因:

  2. 启用Autolayout,在视图控制器中为按钮创建一个插座并设置

    self.myButton.translatesAutoresizingMaskIntoConstraints = YES;
    

    在视图控制器的viewDidLoad方法中。

    您还可以为按钮添加布局约束并为其设置动画。 (这篇优秀Stackoverflow post解释了它是如何完成的。)

  3. 这种棘手行为的原因是,一旦启用Autolayout,视图的框架就不再与屏幕上显示的实际布局相关,只有视图的布局限制很重要。将其translatesAutoresizingMaskIntoConstraints属性设置为YES会导致系统自动为您的视图创建布局约束,以便以说话的方式“模拟”您设置的框架。

答案 1 :(得分:0)

使用自动布局和约束更容易实现此目的。为你的按钮调用高度约束创建一个IBOutlet就像btnHeight。对宽度约束执行相同的操作,将其称为btnWidth。然后像这样创建一个IBAction:

- (IBAction)buttonPress:(UIButton *)sender {
    UIButton *btn = (UIButton *) sender;
    CGRect r = [[UIScreen mainScreen] bounds];
    if (CGRectEqualToRect(btn.frame, CGRectMake(0.0, 0.0, 370, 200))) {
        [UIView animateWithDuration:0.5 delay:0.0 options:0 animations:^{
            self.btnHeight.constant = r.size.height;
            self.btnWidth.constant = r.size.width;
            [self.view layoutIfNeeded];
        } completion:^(BOOL finished){
        }];
    }else{
        [UIView animateWithDuration:0.5 delay:0.0 options:0 animations:^{
            self.btnHeight.constant = 200.0;
            self.btnWidth.constant = 370.0;
            [self.view layoutIfNeeded];
        } completion:^(BOOL finished){
        }];
    }

}

根据我的经验,动画UIButton的框架效果不佳,我知道的唯一方法是使用CGAffineTransformScale,它会光栅化按钮的标题并对其进行缩放。 / p>