1

我正在尝试为按钮设置动画。该按钮将以 0 的高度和宽度开始,并扩展到其预期大小的 100%。然后它将缩小到其大小的 80%,然后再次恢复到 100%。

有没有办法做到这一点而不必为每个位置显式计算 CGRect ?问题是,当 80% 时,框架与 100% 时框架的位置不完全对齐。我必须手动计算框架的 x 和 y 位置,这很耗时,因为我正在为很多按钮执行此操作。

这是我目前正在尝试做的事情:

    CGRect smallPlay = CGRectMake(PlayButton.frame.origin.x + 94, PlayButton.frame.origin.y + 23, 0, 0);
    CGRect almostFullPlay = CGRectMake(40, 170, 160, 30);

    [UIView animateWithDuration:0.3
                    delay:0
                    options: UIViewAnimationCurveEaseOut
                    animations:^{

                     PlayButton.frame = smallPlay;
                     PlayButton.frame = CGRectMake(50, 178, 187, 45);

                 } 
                 completion:^(BOOL finished){
                     [UIView animateWithDuration:0.2 
                         delay:0 
                         options:UIViewAnimationCurveEaseOut 
                         animations:^{

                             PlayButton.frame = almostFullPlay;
                             PlayButton.frame = CGRectMake(50, 178,187, 45);

                     } completion:^(BOOL finished){
                         NSLog(@"Done!");
                     }
                      ];
                 }];

编辑:我意识到我可以编写一个函数来计算 80% 的帧,但我想知道是否有更好的方法来做到这一点,不需要我写任何额外的东西。

4

1 回答 1

5

看起来您只想暂时操纵按钮的外观。如果是这种情况,不要转换它,而是frame尝试转换它transform!这是一个起点。如果您需要更多了解,请告诉我。

[UIView
    animateWithDuration:  ...
    delay:                ...
    options:              UIViewAnimationCurveEaseOut
    animations:           ^ {
        PlayButton.transform = CGAffineTransformMakeScale(0.8, 0.8);
    }];

要将按钮恢复为其原始转换(称为“身份转换”),请将其transform属性设置为CGAffineTransformIdentity.

一旦你弄清楚了,请继续阅读CGAffineTransform(Quartz 的表亲NSAffineTransform,以及 2D 的叔叔CATransform3D。)

于 2012-08-03T03:16:57.340 回答