2010-08-11 5 views
0

Je suis tranquille dans ObjC et la programmation d'application. Tout ce que je veux faire est de fondre dans une image. Pour cela, j'ai fait ceci:Comment j'appelle cette méthode avec un paramètre dans 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]; 
} 

Cela fonctionne bien. Mais maintenant, je veux mettre la fonction de fondu dans une méthode propre et je ne sais pas comment appeler cette méthode:

-(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]; 
} 

Quand j'appelle la méthode comme cela, je reçois un avertissement: » « UIImageView » peut ne répond pas à '-fadeIn:' "

Quelqu'un peut-il m'aider s'il vous plaît?


Désolé, mais je n'arrive pas à le faire fonctionner. L'avertissement reste. Et quand je le fais comme kuroutadori suggéré:

... 
self.alpha = 0; 
... 

Je reçois une erreur: « demande de membre « alpha » dans quelque chose pas une structure ou d'une union »

Répondre

0

Vous déclarez fadeIn: votre classe actuelle (nous aurions besoin de plus de code pour voir lequel il est) encore appeler sur une instance UIImageView (dans votre cas myImgView).

Vous devez le déclarer en privé dans votre fichier d'implémentation de classe actuel (sous la forme Jonathan Grynspansuggested).Ou si vous utilisez intensivement cette animation, mettre en UIImageView lui-même par une catégorie:

@interface UIImageView (MyFade) 

- (void) fadeIn; 

@end 

puis la mettre en œuvre avec

@implementation UIImageView (MyFade) 

- (void) fadeIn 
{ 
    self.alpha = 0; 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:1]; 
    selfe.alpha = 1; 
    [UIView commitAnimations]; 
} 

@end 
0

Cet avertissement survient généralement parce que il n'y a pas de déclaration écrite dans le fichier d'interface ou le fichier .h.

Je suppose que fadeIn est dans la classe myImgView, alors pourquoi passez-vous moi-même? Il suffit de le faire [myImgView fadeIn]; et remplacer imgFade par self.

code

pour la source .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 

Ajouter à votre tête .h

- (void) fadeIn; 

Ou comme quelqu'un l'a dit, mis en haut du fichier source .m avant @implementation.

@interface MyClass() 
    - (void) fadeIn; 
@end 

Pour le rendre privé

+0

qui ne fonctionne pas. – Crazer

1

Mettez -changeImg: après -fadeIn:. Mieux encore, déclarer vos méthodes privées dans une catégorie en haut du fichier:

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

Vous n'avez pas besoin de passer self comme ça - chaque méthode que vous appelez sur le même objet aura le même self .

+0

hmmm Je ne semble pas l'avoir. J'ai fait tous les changements mais l'avertissement apparaît toujours. – Crazer

+0

Avez-vous remplacé 'MyClass' par le nom réel de votre classe? –

0

Vous l'avez en arrière.

[self fadeIn:myImgView]; 
Questions connexes