0

我为要在我的应用程序中使用的菜单创建了一个 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:#]. 可能不是最优雅的,但它是迄今为止最好的。

4

1 回答 1

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;
                   }];
}
于 2013-09-18T13:47:11.910 回答