![]() |
XE5 + iOS: AnimationDelegate und Selector für AnimationDidStopSelector erstellen???
Hallo!
Ich mehrere Animationen nach einander ausführen lassen. Dafür muss ich jeder Animation den Delegate und ein Selector auf eine Methode innerhalb des Delegates zuweisen. Alle meine Versuche bleiben bis jetzt erfolglos. Beim suchen bin in auf ![]() |
AW: XE5 + iOS: AnimationDelegate und Selector für AnimationDidStopSelector erstellen?
Ray Wenderlich hat ein schönes Tutorial über die UIAminations geschrieben.
![]() In Abschnitt "How To Chain Animations" steht die Antwort auf deine Frage. Du erstellst Dir für jede Teilanimation eine einzelne Methode, in der du deinen ViewController zum UIAnimationDelegate der zu animierenden View machst und mit "UIView.<setAnimationDidStopSelector" festlegst was nach dem Ablaufen der Teilanimation aufgerufen werden soll. In Deinem Fall die nächste Teilanimation konfigurieren und starten ... |
AW: XE5 + iOS: AnimationDelegate und Selector für AnimationDidStopSelector erstellen?
Zitat:
Code:
die nächste Animation starten.
completion:^(BOOL finished){ }
Mein Problem ist, dies in Delphi zu implementieren. Ich habe immer noch ein Verständnisproblem mit der Deklarationen von ObjC-Classen und registrierung von Methoden innerhalb dieser Klassen. In meinem Fall z.B. muss ich eine ObjectiveC-Klasse erstellen und dort eine neue Methode deklarieren, die ich später als Selector an die Animation übergebe. Bei der Methode für den animationDidStopSelector muss eine bestimmte Form eingehalten werden:
Code:
Kurz gesagt, ich habe es bis jetzt nicht geschafft. Kann mir jemand mit einem Code-Beiespiel helfen? Danke!
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
|
AW: XE5 + iOS: AnimationDelegate und Selector für AnimationDidStopSelector erstellen?
Unter dem Strich muss es am Ende doch etwa so aussehen ...
Delphi-Quellcode:
interface
TmyViewController = class(TIrgendwasFMXUIViewControllerWrap&Pizza) private procedure viewDidAppear(..); procedure myAnimation1DidStop(const finished: NSInteger); message 'myAnimation1DidStop:'; procedure myAnimation2DidStop(const finished: NSInteger); message 'myAnimation2DidStop:'; procedure myAnimation3DidStop(const finished: NSInteger); message 'myAnimation3DidStop:'; public end; implementation procedure TmyViewController.viewDidAppear() // oder was auch immer Du als Trigger zum Starten der ersten Animation nimmst .. var lSEL: Die_FXM_SELECTOR_Klasse; begin lSEL := sel_registerName( PChar( 'myAnimation1DidStop:')); self.View.setAnimationDelegate(self); self.View.setAnimationDidStopSelector(lSEL); // hier die erste Animation starten end; procedure TmyViewController.myAnimation1DidStop(const finished: NSInteger); var lSEL: Die_FXM_SELECTOR_Klasse; begin lSEL := sel_registerName( PChar( 'myAnimation2DidStop:')); self.View.setAnimationDelegate(self); self.View.setAnimationDidStopSelector(lSEL); // und die 2. Animation starten end; procedure TmyViewController.myAnimation2DidStop(const finished: NSInteger); var lSEL: Die_FXM_SELECTOR_Klasse; begin lSEL := sel_registerName( PChar( 'myAnimation3DidStop:')); self.View.setAnimationDelegate(self); self.View.setAnimationDidStopSelector(lSEL); // und die 3. Animation starten end; procedure TmyViewController.myAnimation3DidStop(const finished: NSInteger); var lSEL: Die_FXM_SELECTOR_Klasse; begin run(do_nothing_loop); end; |
AW: XE5 + iOS: AnimationDelegate und Selector für AnimationDidStopSelector erstellen?
Danke für dieses Beispiel!
An den Deklarationen der Methoden scheitert es mit folgenden Fehlermeldungen:
Delphi-Quellcode:
procedure myAnimation1DidStop(const finished: NSInteger); message 'myAnimation1DidStop:';
E2138 Ungültige Botschaftsparameterliste E2010 Inkompatible Typen: 'string' und 'Integer' Ich vermute auch, dass die deklaration der Methode nicht ganz richtig ist. Unter Xcode erwartet die Methode drei Parameter:
Code:
Einer Bootschaftsprocedur können wir dagegen nur ein Parameter übergeben.
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
|
AW: XE5 + iOS: AnimationDelegate und Selector für AnimationDidStopSelector erstellen?
Hast Recht. Der Codeschnipsel im EMBT Forum ist Nonsens.
Laut der Apple Doku muss der Selector exakt folgende Signatur haben:
Delphi-Quellcode:
Die Parameter "animationID" und "context" können dabei NIL Werte bekommen.
- (void)myTransitionDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context;
Unter Oxygene würde ich das so lösen:
Delphi-Quellcode:
Wie man das in Delphi ohne "multi-part method names" lösen kann weiß ich nicht.
type TContext=method();
var aContext:TContext; method myTransitionDidStop(animationID:NSString) finished(finished:NSNumber) context(aContext); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz