![](/img/trans.png)
[英]In ObjC, how do I hide implementation a superclass's methods in a subclass?
[英]How do I call this methods with a parameter in ObjC
我对ObjC和应用程序编程很陌生。 我要做的就是使图像褪色。 为此,我这样做:
-(IBAction)changeImg:(id)sender{
myImgView.image = [UIImage imageNamed:@"image.png"];
myImgView.alpha = 0;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1];
myImgView.alpha = 1;
[UIView commitAnimations];
}
效果不错。 但是现在我想将衰落函数放入自己的方法中,但我不知道如何调用该方法:
-(IBAction)changeImg:(id)sender{
myImgView.image = [UIImage imageNamed:@"image.png"];
[myImgView fadeIn:self];
}
-(void) fadeIn:(UIImageView *) imgFade{
imgFade.alpha = 0;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1];
imgFade.alpha = 1;
[UIView commitAnimations];
}
当我这样调用方法时,会收到警告:“ 'UIImageView'可能不会响应'-fadeIn:' ”
谁能帮我吗?
抱歉,我无法正常工作。 警告仍然存在。 当我这样做时,就像kuroutadori建议的那样:
...
self.alpha = 0;
...
我收到一个错误:“ 请求成员'alpha'的东西不是结构或联合 ”
Put- -changeImg:
-fadeIn:
之后-fadeIn:
。 更好的是,在文件顶部的类别中声明您的私有方法:
@interface MyClass (PrivateMethods)
- (void)fadeIn: (UIImageView *)imgFade;
@end
您不需要像这样传递self
在同一个对象上调用的每个方法都将具有相同的self
。
通常会出现该警告,因为接口文件或.h
文件中没有书面声明。
我假设fadeIn在myImgView
类中,那么为什么要传递self? 使其成为[myImgView fadeIn];
并将imgFade
替换为self
。
源代码.m
@implementation MyClass
-(IBAction)changeImg:(id)sender{
myImgView.image = [UIImage imageNamed:@"image.png"];
[myImgView fadeIn];
}
-(void) fadeIn{
self.alpha = 0;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1];
selfe.alpha = 1;
[UIView commitAnimations];
}
@end
添加到标题.h
- (void) fadeIn;
或有人说过,在@implementation之前放在源文件.m
顶部。
@interface MyClass ()
- (void) fadeIn;
@end
设为私人
你已经倒退了。
[self fadeIn:myImgView];
您在当前类上声明fadeIn:
我们将需要更多代码来查看它是哪一个),但在UIImageView
实例(在您的情况下为myImgView )上调用它。
您应该在当前的类实现文件中私下声明它(如Jonathan Grynspan所 建议 )。 或者,如果您正在广泛使用此动画,请通过一个类别将其放入UIImageView本身:
@interface UIImageView (MyFade)
- (void) fadeIn;
@end
然后用
@implementation UIImageView (MyFade)
- (void) fadeIn
{
self.alpha = 0;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1];
selfe.alpha = 1;
[UIView commitAnimations];
}
@end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.