2015-09-09 2 views
8

Ich erstelle eine grundlegende Skizzier-App mit swift 1.2 und Xcode 6.4. Die Funktion, an der ich gerade arbeite, fügt dem Bild Text für zukünftige Manipulationen hinzu.Swift - Setzen Sie das Label so, dass es über anderen View Items liegt

Bis jetzt habe ich den Text, den der Benutzer eingibt, der Zeichnung über das Etikett hinzufügend, aber es wird gesetzt (ich nehme an) hinter dem UIImage, das gezogen werden soll. Dies verhindert, dass die zugehörige Tippgeste erkannt wird. Das Etikett ist auch beim Überfahren verdeckt.

Wie lege ich das Etikett über alles andere, um zu verhindern, dass es übergezogen wird? Das Endziel besteht darin, dem Benutzer das Verschieben des Etiketts zu ermöglichen.

Wenn ich meinen üblichen Web-Stack verwenden würde, würde ich die z-index des Elements über CSS auf einen hohen Wert setzen.

Edit: Die Verwendung von view.bringSubviewToFront(label) verhindert, dass der Text übergezogen wird, erlaubt aber nicht, dass die Tippgeste aufgenommen wird.

Heres mein Code:

func printText(){ 
     println(textString) 

     var label = UILabel(frame: CGRectMake(5, 100, 200, 50)) 
     label.textAlignment = NSTextAlignment.Center 
     label.text = textString; 

     let tap = UITapGestureRecognizer(target: self, action: Selector("handleTap")) 
     label.addGestureRecognizer(tap) 

     self.view.addSubview(label); 
    } 

    func handleTap() { 
     print("tap working") 
    } 

Jede Hilfe sehr geschätzt.

Antwort

32

Wenn Sie z-Index verwenden möchten:

label.layer.zPosition = 1; 

Auch Sie könnten mit bringToFront Methode auf der übergeordneten Ansicht spielen:

self.view.bringSubviewToFront(label); 

können Sie diese Funktion hier überprüfen: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/

Außerdem sollten Sie Folgendes hinzufügen:

label.userInteractionEnabled = true 

um Berührungen zu ermöglichen.

+0

schicken, aber die Tippgeste wird immer noch nicht aufgenommen. – tonyedwardspz

+0

weil Sie fehlen label.userInteractionEnabled = true – Miknash

+1

Ehrfürchtig. Danke vielmals. – tonyedwardspz

4

versuchen, die in der übergeordneten Ansicht mit:

view.bringSubviewToFront(label) 
view.sendSubviewToBack(imageView) 

Es hängt alles davon ab, was Sie können oder wollen.

+0

Dies verhindert, dass das Etikett übergezogen wird (was super ist), erlaubt aber nicht, dass die Tippgeste aufgenommen wird. – tonyedwardspz

+0

BTW. Das ist genau die gleiche Antwort, die ich anbot. – Miknash

+0

Es gibt nur eine 5-minütige Lücke zwischen den Antworten. Ich habe Ihre Antwort nicht gesehen, da ich das Fenster nicht aktualisiert habe. Außerdem haben Sie das sendSubviewToBack nicht erwähnt, das auch nützlich sein könnte. – Rafal

2

Sie können Etikett nach vorne rufen durch

self.view.bringSubviewToFront(label) 

oder

Sie können diese beiden stoppen das Etikett wird gezogen über das Bild Sicht nach hinten durch

self.view.sendSubviewToBack(imageView) 
+0

Dies verhindert, dass das Etikett übergezogen wird, lässt aber nicht zu, dass die Antipp-Geste übernommen wird – tonyedwardspz

+0

genau die gleiche Antwort, die von Rafal und mir angeboten wird. – Miknash

+0

Sorry, aber ich habe nur die Frage überprüft, nicht die Antworten anderer. –

Verwandte Themen