AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung iOS XE5 + iOS: AnimationDelegate und Selector für AnimationDidStopSelector erstellen???

XE5 + iOS: AnimationDelegate und Selector für AnimationDidStopSelector erstellen???

Ein Thema von romber · begonnen am 4. Feb 2014 · letzter Beitrag vom 5. Feb 2014
Antwort Antwort
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#1

XE5 + iOS: AnimationDelegate und Selector für AnimationDidStopSelector erstellen???

  Alt 4. Feb 2014, 13:23
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 diesen Thread auf Embarcadero-Forum gestoßen. Dort postet der Autor eine Lösung, aber leider nicht vollständig. Es muss ein Delegate (objcclass) erstellt und dort die neue Methode implementiert werden. Kann mir jemand erklären, wie das geht? Im Voraus vielen Dank!

Geändert von romber ( 4. Feb 2014 um 13:42 Uhr)
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#2

AW: XE5 + iOS: AnimationDelegate und Selector für AnimationDidStopSelector erstellen?

  Alt 5. Feb 2014, 06:39
Ray Wenderlich hat ein schönes Tutorial über die UIAminations geschrieben.
http://www.raywenderlich.com/2454/ui...view-animation.

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 ...
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#3

AW: XE5 + iOS: AnimationDelegate und Selector für AnimationDidStopSelector erstellen?

  Alt 5. Feb 2014, 07:47
Ray Wenderlich hat ein schönes Tutorial über die UIAminations geschrieben.
http://www.raywenderlich.com/2454/ui...view-animation...
Vielen Dank für diesen Link. Diesen Tutorial habe ich auch schon gelesen, hilft mir aber nicht weiter. Wie das in Xcode geht, weis ich. In Xcode würde ich sogar gar gar kein Selector erstellen, sondern direkt innerhalb
Code:
completion:^(BOOL finished){ }
die nächste Animation starten.

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:
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
Kurz gesagt, ich habe es bis jetzt nicht geschafft. Kann mir jemand mit einem Code-Beiespiel helfen? Danke!
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#4

AW: XE5 + iOS: AnimationDelegate und Selector für AnimationDidStopSelector erstellen?

  Alt 5. Feb 2014, 08:36
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;
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#5

AW: XE5 + iOS: AnimationDelegate und Selector für AnimationDidStopSelector erstellen?

  Alt 5. Feb 2014, 14:03
Danke für dieses Beispiel!

An den Deklarationen der Methoden scheitert es mit folgenden Fehlermeldungen:

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:
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
Einer Bootschaftsprocedur können wir dagegen nur ein Parameter übergeben.

Geändert von romber ( 5. Feb 2014 um 14:07 Uhr)
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#6

AW: XE5 + iOS: AnimationDelegate und Selector für AnimationDidStopSelector erstellen?

  Alt 5. Feb 2014, 14:41
Hast Recht. Der Codeschnipsel im EMBT Forum ist Nonsens.

Laut der Apple Doku muss der Selector exakt folgende Signatur haben:
- (void)myTransitionDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context; Die Parameter "animationID" und "context" können dabei NIL Werte bekommen.

Unter Oxygene würde ich das so lösen:
Delphi-Quellcode:
type TContext=method();
var aContext:TContext;

method myTransitionDidStop(animationID:NSString) finished(finished:NSNumber) context(aContext);
Wie man das in Delphi ohne "multi-part method names" lösen kann weiß ich nicht.

Geändert von jensw_2000 ( 5. Feb 2014 um 14:44 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz