2017-07-06 5 views
5

Gibt es eine Möglichkeit, den Inhalt eines bestimmten segmentierten Segments zu transformieren? (Ich habe es zu drehen, indem 180 °)Segment in segmentiertes Steuerelement umwandeln

Nicht das Bild in ihm enthalten ist, weil in meinem Fall es nicht ein (ich habe verwendet FontAwesome)

Demonstration:

aus: original zu: rotated

Antwort

1

Ein Segment ist eine kleine UIView, auf die Sie einfach eine Transformation anwenden können.

auf diese Frage finden Sie über die subview bekommen:

UISegmentedControl selected segment color

Und dieser andere beziehen sich auf „Drehen“ der Inhalt.

How to rotate UIView using transform

Dann wieder, ich würde nur einfacher sein, ein Bild aus ihm heraus und verwenden, die stattdessen zu machen.

+0

Dank @Pochi. Wenn jedoch die gesamte UIView gespiegelt wird, werden auch einige andere Eigenschaften wie diese gerundeten Rahmen umgedreht. Ich habe die Frage jetzt editieren - bitten, den Inhalt von UIView und nicht den UIView selbst zu spiegeln. P.S .: UIView enthält kein UILabel. Es enthält eine Sache namens UISegmentLabel. – Dorad

4

Ja, gibt es!

bedenken, dass wir eine segmentierte Steuer enthält 3 Segmente haben:

enter image description here

Eigentlich ist es eine Ansicht ist, die 3 subviews enthält als UISegment typisiert. Wenn wir versuchen, diese segmentierten Steuer subviews (Unter der Annahme, dass wir es auf den gewünschten View-Controller als segmentedControl IBOutlet verbunden) zu drucken:

UISegment:

class ViewController: UIViewController { 
    // MARK:- IBOutlets 
    @IBOutlet weak var segmentedControl: UISegmentedControl! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     for view in segmentedControl.subviews { 
      print(view) 
     } 
    } 
} 

Das Protokoll etwas ähnliches angezeigt werden soll 0x7febebc06980; Rahmen = (229 0; 114 29); Schicht = CALayer: 0x60000002edc0 UISegment: 0x7febebe140c0; Rahmen = (114 0; 114 29); Schicht = CALayer: 0x618000231800 UISegment: 0x7febebe14d30; Rahmen = (0 0; 113 29); Schicht = CALayer: 0x6180002319c0

So können Sie die Segmente in dem segmentierten Steuer als UISegment zugreifen, so benötigt bearbeiten, um es als UIView gelten. Zum Beispiel, wenn Sie das zweite Segment drehen möchten, können Sie implementieren:

override func viewDidLoad() { 
    super.viewDidLoad() 

    for view in segmentedControl.subviews[1].subviews { 
     print(view) 
     view.transform = CGAffineTransform(scaleX: -1, y: 1) 
    } 
} 

Wie Sie sehen können, auch das Segment Subviews:

UISegmentLabel: 0x7f8b51701770; Rahmen = (0 0; 64 22.5); text = 'Sekunde'; undurchsichtig = NEIN; userInteractionEnabled = NEIN; Schicht = _UILabelLayer: 0x610000091530

UIImageView: 0x7f8b51701470; Rahmen = (114 0; 1 1); Alpha = 0; undurchsichtig = NEIN; Autoresize = LM; userInteractionEnabled = NEIN; Markierung = -1030; Schicht = CALayer: 0x610000031480

Also, sollten Sie alle diese Subviews drehen, wie über dem Code-Schnipsel implementiert in.

würde der Ausgang sein:

enter image description here


Der gleiche Ansatz mit segmentierten Kontrollen anwendbar sein sollte, die Bilder statt Titel haben:

Vor dem Drehen:

enter image description here

Nach dem Drehen:

enter image description here

+0

Danke für die ausführliche Antwort. Aber nichts ändert sich ... – Dorad

+0

Könnten Sie erwähnen, was das Problem ist? Haben Sie versucht, die Untersichten einer segmentierten Steuerung wie in der Antwort erwähnt zu drucken? Ich denke, dass Sie etwas vermissen könnten ... –

+0

es ist ziemlich das gleiche Drucken, aber die Ansicht ändert sich nicht. – Dorad