iOS - 按下按钮时对象动画,但在以编程方式调用方法时则不动画

时间:2013-09-18 13:37:38

标签: ios objective-c core-animation

我有一个UIView子类我为我想要在我的应用程序中使用的菜单。 菜单可以打开和关闭,它有一个动画:

- (void)hideMenu {
    [UIView animateWithDuration:duration
                   animations:^ {
                     // Do some hiding animation
                     // using CGAffineTransformMake. Ex:
                     [button1 setTransform:CGAffineTransformMake(1, 0, 0, 1, -120, 0)];
                   }
                   completion:^(BOOL finished) {
                     isOpen = NO;
                   }];
}

通过类方法,它实例化一个单例,所以我可以在许多视图中使用相同的实例,并且我想有一个选项来实例化它打开或关闭。

在nib文件中,对象最初显示,所以我尝试运行,在初始化单例之后上面的hide方法:

(...)
if (shouldStartClosed)
    [_singleton hideMenu];
return _singleton;

我注意到该方法当然被调用,每一行都运行,BOOL标志改变。但是,对象没有正确动画。当我按下菜单中的一个按钮时,会调用这个相同的方法,这次它可以正常工作并隐藏菜单。

这可能是什么原因?

更新: 到目前为止,我发现的最佳解决方案是重复hideMenu方法并用[_singleton viewWithTag:#]替换每个按钮实例变量。可能不是最优雅的,但到目前为止它是最好的。

1 个答案:

答案 0 :(得分:1)

为此尝试一种类方法。然后,您甚至不需要实例化该类来调用该方法。就像[classwherethemethodis hideMenu:yourbutton];如果从其他地方调用按钮,主要的想法是将按钮作为参数传递。

+ (void)hideMenu:(UIBUtton*)button {
    [UIView animateWithDuration:duration
                   animations:^ {
                     // Do some hiding animation
                     // using CGAffineTransformMake. Ex:
                     [button setTransform:CGAffineTransformMake(1, 0, 0, 1, -120, 0)];
                   }
                   completion:^(BOOL finished) {
                     //isOpen = NO;
                   }];
}