我在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'不是结构或联合”
答案 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