我想覆盖我的UIView派生类中的隐藏功能,以使用alpha为hide / show设置动画(即封装功能)。由于这似乎只是基本的OO,我尝试了在我的班级中提供新功能的明显技巧,如下所示:
-(BOOL)isHidden {
return [super isHidden];
}
- (void)setHidden:(BOOL)hidden {
CGFloat newAlpha = 0.75f;
if (self.hidden == NO) {
newAlpha = 0.0;
}
[UIView animateWithDuration:0.5 animations: ^() {
self.alpha = newAlpha;}];
}
......不起作用。我尝试了很多组合,但似乎无法覆盖,UIView方法只是不断被调用 - 我疯了吗?是否存在我无法理解的限制?
答案 0 :(得分:0)
我无法理解你的感觉,但我希望你错过了完成块。所以,试试吧:
- (void)setHidden:(BOOL)hidden {
CGFloat newAlpha = 0.75f;
if (self.hidden == NO) {
newAlpha = 0.0;
}
UIView animateWithDuration:0.5 animations:^{
self.alpha = newAlpha;
} completion:^(BOOL finished) {
[super setHidden:hidden];
}
}
在完成块中,您必须设置UIView的隐藏属性。
答案 1 :(得分:0)
抱歉 - 经过几个月的学习后回答我自己的问题......
我是一个doofus,一定是一个糟糕的一天 - 我的问题中的重写代码完美无缺,除非你做了我做过的愚蠢的事情,就是在我的头文件中添加一个覆盖属性:
@property(nonatomic,getter=isHidden) BOOL hidden;
将此添加到标题意味着我的isHidden / setHidden根本不被视为重载方法,即我打破了多态性。