我有一个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:#]
替换每个按钮实例变量。可能不是最优雅的,但到目前为止它是最好的。
答案 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;
}];
}