如何使用ObjC中的参数调用此方法

时间:2010-08-11 14:15:11

标签: objective-c iphone

我在ObjC和app编程方面很安静。我想做的就是淡化图像。为此我做了这个:

-(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'不是结构或联合

4 个答案:

答案 0 :(得分:1)

-changeImg:放在-fadeIn:之后。更好的是,在文件顶部的类别中声明您的私有方法:

@interface MyClass (PrivateMethods)
- (void)fadeIn: (UIImageView *)imgFade;
@end

您不需要像这样传递self - 您在同一个对象上调用的每个方法都具有相同的self

答案 1 :(得分:0)

该警告通常会出现,因为接口文件或.h文件中没有书面声明。

我认为fadeIn在myImgView级,所以你为什么要通过自我?只需将其设为[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 

将其设为私有

答案 2 :(得分:0)

你已经倒退了。

[self fadeIn:myImgView];

答案 3 :(得分:0)

您在当前课程中声明fadeIn:(我们需要更多代码才能查看它是哪一个)但是在UIImageView实例上调用它(在您的情况下 myImgView )。

您应该在当前的类实现文件中私下声明它(Jonathan Grynspan suggested)。或者,如果您正在广泛使用此动画,请通过以下类别将其放入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