layer onclick ausblenden auf dem iphone

  • Hallo Allerseits,

    in meinem Rundgang erscheint im Start-Panorama ein zentrierter Layer mit einer Benutzersanweisung, ähnlich eines Tooltips in einer Lightbox. Der Betrachter wird angehlten diesen per click zu schließen um den Rundgang zu starten. Der click blendet den Layer aus und startet gleichzeitig die Hintergrundmusic auf dem iphone. Funktioniert im ipad super. Im iphone wird der layer leider nicht ausgeblendet. Was mach ich falsch? Hier mein Code:

    Hat vielleicht jemand eine Idee warum der Layer auf dem iphone stehen bleibt? Oder kann man das viel besser umsetzen?

    Grüße Lutz

  • Hi,

    An dem Code selbst kann man das jetzt erkennen warum es nicht funktionieren sollte...
    Nur dieser Teil hier sieht seltsam aus:

    Zitat

    if(ismobile, hidestartlayer()); hidestartlayer();

    Warum soll auf mobilen Geräten die hidestartlayer() Action 2x ausgeführt werden?

    Schöne Grüße,
    Klaus

  • Hallo Klaus,

    danke für die Antwort. Ich hatte das 'startmusic()' in meinem Code vergessen.
    Bei cklick auf den layer soll auf mobilen Endgeräten, wie bei meinem iphone, die Music starten und der Layer sich ausblenden. -hatte in der Doku gelesen, dass auf dem iphone, das automatische Starten von Musik nicht unterstützt wird. Darum click auf den Begrüßungs-layer. Das zweite " hidestartlayer()" soll dann für alle nicht-mobilen Geräte gelten.

    Leider besteht das Problem noch weiter, der Layer wird nicht auf dem iphone ausgeblendet, sondern blockiert das restliche Interface.

    ???

    Ich habe den besagten layer in die Start-Scene platziert. Sollte ich den lieber in die Skin einbauen?
    Wie baut man eine eigene Skin? Gibt es da ein gutes Tutorial?

    Hier der Code nochmal...

    Viele Grüße

    Lutz

  • Hallo,

    ich habe nocheinmal mit etwas herumprobiert und den Code geändert. Habe den Layer jetzt in der skintour.xml platziert. Das mit dem Layer ausblenden funktioniert jetzt auch auf dem iphone... *smile*
    Hier der code:

    Code
    <!-- Skin Layout -->
    	
    <layer name="snd" type="image" url="sound.png" keep="true" align="lefttop" x="10" y="9" alpha="0.5" scale="1" onover="tween(alpha,1);" onout="tween(alpha,0.5);" crop="0|0|50|50" onloaded="if(ismobile,set(scale,1));" onclick="pausesoundtoggle(bgsnd); switch(crop, 0|50|50|50, 0|0|50|50);"/>
    	
       <layer name="startlayer" type="image" url="startlayer.png" keep="true" align="center" width="420" height="250" x="0" y="0" alpha="0.8" onclick="hidestartlayer(); if(ismobile, startmusic());" />
       	
     <layer name="skin_scroll_window" type="container" keep="true" align="leftbottom" width="100%" height="100%" x="0" y="60" y_opened="60" y_closed="-2" maskchildren="true">
     ...

    Wie gesagt, der Layer erscheint mittig und muss vom Betrachter weggeclickt werden( startet den Sound auf dem iphone ). Soweit so gut... es funktioniert!
    Aber das Interface reagiert auf meinem iphone nicht mehr.
    Ist der layer falsch platziert? Woran liegt das?

    Ich bin ja ein bisschen am verzweifeln... *cry*

  • Moin *sleeping*

    Bin zwar gerade erst beim ersten Kaffee, aber sollte diese Zeile
    tween(layer[startlayer].alpha,0,,,set(layer[startlayer].visible,false));
    nicht eher so aussehen
    tween(layer[startlayer].alpha,0,0,default,set(layer[startlayer].visible,false));
    ?

    Vor allem aber, warum tweenst Du den layer auf alpha=0, wenn Du eh keinen Tweenzeitraum angibst und der layer da fakto eh sofort ausgeblendet wird? Da täte ein "set(layer[startlayer].visible,false)" ja reichen. Und falls der layer nicht irgendwann nochmal benötigt wird, könntest Du ihn doch eigentlich auch gleich ganz entfernen, oder?!

    Gruß
    Nupsi

  • Nupsi,

    Moin,

    Danke für die Antwort! *smile*

    - bin selber ein absoluter Neuling... Hatte mir den Code hier aus dem Forum zusammengesucht.
    Davon mal abgesehen wird der Layer schön ausgeblendet. Also wirklich ausgeblendet... hab in der Doku nochmal nachgesehen, die Default-time ist 0.5. Deswegen also!

    Ja, der Layer wird dann nicht mehr gebraucht bzw. kann entfernt werden. Ich, als Neuling, schaue da in der Doku nach und finde da das Attribut "keep" und "enabled"... Die Action sieht jetzt so aus:

    Code
    <action name="hidestartlayer">
    			tween(layer[startlayer].alpha,0,0.5,default);
    			set(layer[startlayer].keep, false);
    			set(layer[startlayer].enabled, false);
    </action>

    Auf meinem macbook funktioniert es! Auf meinem iphone, blendet sich der layer aus bei click. Die Musik startet auch. ABER: Das komplette Interface/Skin reagiert nicht mehr ... auch kein Hotspot...???

    Wenn ich den Layer nicht einsetze/ausdookumentiere funtioniert auch alles so wie es soll. Liegt es vielleicht daran, dass ich den Layer an der falschen Stelle in der Skin positionert habe?
    (wie schon gesagt: startpunkt ist mit dem MAKE VTOUR (MULTIRES) droplet erzeugt worden)

    Habe meinen Layer am Anfang des normalen Skinlayouts positioniert:

    Warum reagiert auf dem iphone das Interface nicht mehr???

    Grüße Lutz

  • Vom Code her siehts erstmal iO aus, auch wenn Du im Beispiel oben noch immer keep=true zu stehen hast. Aber sagtest ja, Du hättest es geändert. Ansonsten wüsste ich auf die Schnelle auch nicht woran es liegen könnte. krpano ist manchmal etwas zickig, wenn zB der Name eines layers/plugins den Namen einer Funktion hat, oder in welcher Reihenfolge Funktionen aufgerufen werden. Hast mal versucht zuerst die Musik zu starten, anschließend den Layer auszufaden und nach einem kurzen delay den Layer zu entfernen? Nicht selten liegen solche Fehler einfach am timing.

    Oh...ich sehe gerade, Du setzt das keep=false und enabled=false erst in der action. Das könnte natürlich problematisch werden, da diese in der action bereits aufgerufen werden, während der tween noch am laufen ist. krpano arbeitet die Befehle in der action nicht zwingenderweise der Reihe nach ab, oder wartet gar mit dem ausführen bis die vorherige Zeile abgearbeitet ist.
    Mein Tipp: Setze den Layer standardmäßig auf "keep=false" und schreibe das onclick-event wie folgt um:

    onclick="if(ismobile,startmusic());tween(alpha,0,0.5,default,set(visible,false);removelayer(startlayer))";

    Das set(visible,false); könntest Du Dir in diesem Fall sogar schenken, da dies beim entfernen ja eh keine Rolle mehr spielt.

    Gruß
    Nupsi

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!