使用CGAffineTransformScale自定义UIView缩放

时间:2014-03-01 22:25:25

标签: ios uiview transformation

我正在学习为iOS开发,作为教育过程的一部分,我创建了自定义UIView,使用drawRect绘制内容(基于Core Graphics + UIBezierPath)。 Everthing按预期工作,视图是动态的,并根据它的宽度/高度呈现它的内容。现在我想添加溶解动画,它看起来应该从100%缩放到0%。我写了这段代码来做到这一点:

[UIView animateWithDuration:1 delay:0
                options: UIViewAnimationOptionBeginFromCurrentState
             animations: ^{
     for (CardView *cardView in self.cardsViews) {
         cardView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.01, 0.01);

     }} completion:nil];

但是,此代码不会将我的视图从100%缩放到0%。它只是使卡片消失(最多)。我已经尝试了很多方法来进行缩放,但到目前为止我所达到的效果只是从0%缩放到100%。这个我的观点完美,但没有反向缩放......而且,即使我尝试应用非动画变换,它也不会向上/向下缩放,例如:

cardView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.5, 0.5);

我看到我的视图看起来会改变A BIT,但不会扩展到50%,这是肯定的。当我尝试将完全相同的动画逻辑应用于UILabel时,它完美运行!我错过了开发自定义UIView的哪些方面?缩放视图为何可能出现故障 非常感谢提前!

更新#1 此代码使我的视图的大小只是原来大小的两倍,而不是将其缩放回原始大小:

[UIView animateWithDuration:5 delay:0
                    options: UIViewAnimationOptionBeginFromCurrentState
                 animations: ^{
         for (CardView *cardView in self.cardsViews) {
             cardView.transform = CGAffineTransformMakeScale(0.5, 0.5);
         }
    } completion:nil];

3 个答案:

答案 0 :(得分:6)

使用CGAffineTransformScale:

是100%到0%
cardView.view.transform =CGAffineTransformScale(CGAffineTransformIdentity, 1.1, 1.1);

[UIView animateWithDuration:0.3/1.5 animations:^{
        cardView.view.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.1, 0.1);
    } completion:^(BOOL finished)
    {
              NSLog(@" Animation complet Block");
    }];

答案 1 :(得分:1)

您可以尝试将视图的contentMode设置为UIViewContentModeRedraw,并在UIViewAnimationOptionAllowAnimatedContent方法中添加另一个动画选项 - animateWithDuration

答案 2 :(得分:1)

从120%迅速缩放到100%:

logoView.transform = CGAffineTransform(scaleX: 1.2, y: 1.2)
UIView.animate(withDuration: 0.55, delay: 0.1, options: [.curveEaseOut], animations: {
    self.logoView.transform = .identity
    self.view.layoutIfNeeded()
}, completion: { _ in
})