Ausziehbare Lasche am Rand des Screens

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Aufgrund der Corona-Krise: Die Veröffentlichung von Stellenangeboten und -gesuchen ist bis 31.12.2020 kostenfrei. Das beinhaltet auch Angebote und Gesuche von und für Freischaffende und Selbstständige.

  • Ausziehbare Lasche am Rand des Screens

    Hallo zusammen,
    Ich habe folgendes Problem: Ich möchte eine Lasche (UIView) am Rande des Screens positionieren. Sobald der User an dieser "zieht" soll die Lasche mitsamt weiterer Bedienelemente herausgefahren werden. Kann mir jemand hier einmal bei dem Konzept helfen?

    Ich dachte eigentlich es reicht einen eigenen UIViewController zu erstellen, der 2 UIViews besitzt, eine für die Lasche und eine für den auszufahrenden Content. Das klappt aber leider nicht, denn sobald bei einer UIVIew auf dem ViewController setUserInteractionEnabled:FALSE aufgerufen wurde, ist KEINE der Views mehr "anklickbar".


    Quellcode

    1. - (id)initWithFrame:(CGRect)frame {
    2. self = [super initWithNibName:nil bundle:nil];
    3. if (self) {
    4. self.view = [[UIView alloc] initWithFrame:CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, frame.size.height+50)];
    5. [self.view setBackgroundColor:[UIColor blueColor]];
    6. [self.view setUserInteractionEnabled:FALSE];
    7. // bg ist die Detailansicht
    8. UIView *bg = [[UIView alloc] initWithFrame:frame];
    9. [bg setBackgroundColor:[UIColor redColor]];
    10. [bg setAlpha:0.7];
    11. [self.view addSubview:bg];
    12. [bg setUserInteractionEnabled:FALSE];
    13. [bg release];
    14. // Hierbei handelt es sich um die "Lasche"
    15. UIView *buttstrap = [[UIView alloc] initWithFrame:CGRectMake(270, frame.size.height, 50, 50)];
    16. [buttstrap setBackgroundColor:[UIColor greenColor]];
    17. [buttstrap setAlpha:0.7];
    18. [bg setUserInteractionEnabled:TRUE];
    19. [self.view addSubview:buttstrap];
    20. }
    21. return self;
    22. }
    23. - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
    24. NSLog(@"touch!!!");
    25. }
    Alles anzeigen


    Bei dem oben angebildeten Code wird das touchesMoved Event leider nicht ausgeführt :( - hat jemand ne Idee bzw. nen Vorschlag das zu realisieren?
    Ich habe einmal einen Screenshot mit angehängt - hier soll der blaue Bereich nicht anklickbar sein bzw. die Interaktion direkt an die View darunter weiterreichen.

    Danke & Grüße
    Dennis
    "Die Steinzeit ging auch nicht zu Ende weil die Steine ausgingen"
  • jakez schrieb:

    Das klappt aber leider nicht, denn sobald bei einer UIVIew auf dem ViewController setUserInteractionEnabled:FALSE aufgerufen wurde, ist KEINE der Views mehr "anklickbar".

    Das ist auch richtig so, weil genau so auch in der Doku steht ;)

    jakez schrieb:

    hat jemand ne Idee bzw. nen Vorschlag das zu realisieren?

    Warum verwendest Du keine Unterklasse von UIControl und verarbeitest den Event Drag Inside?
    „Meine Komplikation hatte eine Komplikation.“
  • Hi macmoonshine,
    danke für die Schnelle Antwort. Kannst du den letzten Satz einmal genauer spezifizieren - bzw. 2-3 Sätze dazu schreiben? Ich wurschtel mich dann schon dadurch, jedoch reichen mir die von dir genannten Infos noch nicht so ganz;-)

    Mein Slider erbt jetzt von UIControl, und - (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event wird auch schon abgesendet, jedoch hänge ich dann wieder am gleichen Problem mit der userInteractionEnabled.

    lg
    Dennis
    "Die Steinzeit ging auch nicht zu Ende weil die Steine ausgingen"
  • Warum schaltest Du userInteractionEnabled überhaupt aus?

    Wenn Du beim bzw. nach dem Ziehen den ViewController informieren möchtest, solltest Du ein UIControl verwenden und die Tracking-Methoden überschreiben. Den View-Controller kannst Du dann im Interface Builder mit Action-Events im Connections-Inspector verbinden. Die Events musst Du aber aus dem Control mit sendActionsForControlEvents: senden.

    Wenn Du das nicht brauchst, kannst Du auch einen UIView und die Touches-Methoden verwenden.
    „Meine Komplikation hatte eine Komplikation.“
  • Guten Morgen macmoonshine&co ;),
    ich habe es jetzt mit [self sendActionsForControlEvents:UIControlEventTouchUpInside] realisiert - es funktioniert auch soweit. Danke schonmal hierfür.
    Trotzdem habe ich jedoch nach wie vor das Problem, dass (siehe Bild aus dem ersten Post) der blaue Bereich mit zu meinem UIControl Objekt gehört. Auf dem Bild ist das ausgefahrene Menu zu sehen, wobei der Grüne Teil die Lasche und der rote Teil das "Zusatzmenu" darstellen soll.
    Der gesamte blaue Teil hingegen soll Interaktionen direkt an die UIMapView weitergeben, was zZ jedoch noch nicht funktioniert;-(

    Weitere Vorschläge? ;)

    Lg
    "Die Steinzeit ging auch nicht zu Ende weil die Steine ausgingen"