UIView仿射缩放变换不能在两个方向上正确动画

时间:2015-04-18 23:59:00

标签: ios uiview core-animation cgaffinetransform

在viewDidLoad方法中,我使用视图框架中的最小X和Y值创建CGPoint。然后我将该视图层的anchorPoint设置为0,0,将其位置设置为CGPoint。然后我应用CGAffineTransformScale使它成为0,0(隐藏它。)每当用户触摸一个按钮时,我希望它从anchorPoint 0,0(左上角)动画到全宽和高度。如果用户再次按下,则将其设置为0,0。然而,视图不合适(从锚点变化),每当我按下按钮时按下弹出动画不等于图层动画隐藏时。也就是说,无论何时使图层可见,您都可以看到它从无宽度和高度过渡到全宽度和高度,但当它变为不可见时,它就会消失。

heres viewWillLayoutSubviews

self.original = CGPointMake(CGRectGetMinX(self.menu.frame), CGRectGetMinY(self.menu.frame));

self.menu.layer.anchorPoint = CGPointMake(0, 0);


self.menu.layer.position = self.original;

self.menu.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0, 0);

这是按钮点击逻辑

if(self.isMenuVisible)
    {
        //hide menu

        [UIView animateWithDuration:.5 animations:^{


               self.menu.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0, 0);

        }];


        self.isMenuVisible = NO;

    }
    else
    {
     //show it

        [UIView animateWithDuration:.5 animations:^{

             self.menu.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1, 1);

        }];




          self.isMenuVisible = YES;
    }

1 个答案:

答案 0 :(得分:2)

我不知道为什么零宽度和高度不会导致动画,但有一种解决方法,它将宽度和高度缩放到0.01,当动画完成时,隐藏菜单。

if (self.menu.hidden) {
    [UIView animateWithDuration:.5 animations:^{
        self.menu.hidden = NO ;
        self.menu.transform = CGAffineTransformIdentity ;
    }] ;
} else {
    [UIView animateWithDuration:.5 animations:^{
        self.menu.transform = CGAffineTransformScale(self.viewTest.transform, 0.01, 0.01) ;
    } completion:^(BOOL finished) {
        self.menu.hidden = YES ;
    }] ;
}