Normalement, un événement, qui n'est rien mais un message est fixe (fixé et mis en œuvre) dans la même classe ou son contexte, la fonction ou la procédure de "caller". o in un UIViewController . Par exemple, si nous ajoutons un bouton UIButton via un code (programmation), nous pouvons trouver notre classe dans un UIView ou un UIViewController . Dans les deux cas la répartition des tâches et l'initialisation de la touche sera suivie par l'établissement d' target qui devrait recevoir un message quand il "clique" sur le bouton, tapez:
1 2 3 4 5 6 7 8 9 | [ UIButton buttonWithType : UIButtonTypeRoundedRect ] ; UIButton * bouton = [UIButton buttonWithType: UIButtonTypeRoundedRect]; 10 , 180 , 300 , 30 ) ; bottone.frame = CGRectMake (10, 180, 300, 30); @ "Press me" forState : UIControlStateNormal ] ; [Bouton setTitle: @ "me presse" Forst: UIControlStateNormal]; / / Décidez qui devrait recevoir le message de UIControlEventTouchUpInside self action : @selector ( onButtonClicked ) forControlEvents : UIControlEventTouchUpInside ] ; Bouton [AddTarget: action d'auto: @ selector (onButtonClicked) forControlEvents: UIControlEventTouchUpInside]; / / ... void ) onButtonClicked { - (Void) {onButtonClicked / / ... } |
Ligne 5 décide qui le code montré ci-dessus (l'objet) et ce (méthode) "appel" lorsque notre bouton est pressé. Dans l'exemple ci-dessus est également connu que le réglage de la pression du message est envoyé à la méthode onButtonClick œuvre ci-dessous, qui faisait alors partie du même contexte (ou classe). potremmo inviare il nostro messaggio ad un qualsiasi altro oggetto, posto quindi al difuori del contesto in uso. La première considération est évident que nous pouvons faire, alors, est que, en modifiant les paramètres de self et de action que nous pouvons envoyer notre message à tout autre objet, puis placer dans le contexte dans difuori utilisation. : Voici un exemple: une classe UIApplicationDelegate créer un UIViewController :
1 2 3 4 5 | / / / / MyAppDelegate.m / / SplashScreenController alloc ] ; splashScreenController = [SplashScreenController alloc]; splashScreenController.view ] ; [Fenêtre addSubview: splashScreenController.view]; |
associata al UIViewController stesso: Le SplashScreenController expose une méthode qui vous permet d'animer le UIView associé à UIViewController même:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | / / / / SplashScreenController.m / / void ) animateBackgroundDown { - (Void) {animateBackgroundDown nil context : nil ] ; [BeginAnimations UIView: contexte nulle: nil]; 0.75 ] ; [UIView setAnimationDuration: 0,75]; UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut]; self ] ; [SetAnimationDelegate UIView: self]; @selector ( onAnimationFinished ) ] ; [UIView setAnimationDidStopSelector: @ selector (onAnimationFinished)]; CGRect ) { 0 , 480 , 320 , 480 } ; self.view.frame = (CGRect) {0, 480, 320, 480}; ; [CommitAnimations UIView]; } / / ... void ) onAnimationFinished { - (Void) {onAnimationFinished "Animazione terminata" ) ; NSLog (@ "L'animation est terminée"); } |
. Le code ci-dessus montre une méthode définie dans la classe SplashScreenController Type UIViewController . ) onAnimationFinished definito più sotto, facente parte sempre della classe SplashScreenController . Il ne fait rien, mais animer le UIView l'animer en bas, et quand l'animation est terminée, composez le (envoyer un message à lui-même - donc self ) onAnimationFinished défini ci-dessous, fait partie de la classe toujours SplashScreenController . , non saremo informati della fine dell'animazione: Il s'ensuit que, dans nos myAppDelegate , quand nous invoquons la méthode animateBackgroundDown , nous ne serons pas informés de la fin de l'animation:
1 2 3 4 | / / / / MyAppDelegate.m / / ; [SplashScreenController animateBackgroundDown]; |
Que nous pourrions, au contraire, est de créer une nouvelle version de animateBackgroundDown qui me disent où envoyer le message à la fin de l'animation, et la méthode à appeler. En pratique, nous voulons faire en sorte d'écrire dans notre classe myAppDelegate :
1 2 3 4 5 6 7 8 | / / / / MyAppDelegate.m / / self selector : @selector ( onAnimationFinished ) ] ; [SplashScreenController animateBackgroundDown: auto sélecteur: @ selector (onAnimationFinished)]; / / ... void ) onAnimationFinished { - (Void) {onAnimationFinished "Animazione terminata" ) ; NSLog (@ "L'animation est terminée"); } |
, bensì in myAppDelegate . Cette fois la méthode onAnimationFinished n'est pas dans le UIViewController , mais dans myAppDelegate . nel modo seguente: Pour ce faire il suffit de changer la méthode animateBackgroundDown de UIViewController comme suit:
1 2 3 4 5 6 7 8 9 10 11 12 | / / / / SplashScreenController.m / / void ) animateBackgroundDown : ( id ) target selector : ( SEL ) selector { - (Void) animateBackgroundDown: (id) cible sélecteur: (SEL) sélecteur { nil context : nil ] ; [BeginAnimations UIView: contexte nulle: nil]; 0.75 ] ; [UIView setAnimationDuration: 0,75]; UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut]; target ] ; [SetAnimationDelegate UIView: cible]; selector ] ; [UIView setAnimationDidStopSelector: sélecteur]; CGRect ) { 0 , 480 , 320 , 480 } ; self.view.frame = (CGRect) {0, 480, 320, 480}; ; [CommitAnimations UIView]; } |
). Maintenant nous avons une méthode qui prend le "contexte" ( target ) et la méthode à appeler ( selector ). a qualsiasi altro “oggetto” / classe in grado di riceverlo. Maintenant, lorsque l'animation se termine, le message AnimationDidStop sera envoyé à myAppDelegate tout autre "objet" / classe qui peut le recevoir.










Il n'y a aucun commentaire pour cet article
Laisser un commentaire