在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;
}
答案 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 ;
}] ;
}