2016-11-04 4 views
-2

Gibt es eine Möglichkeit, zwei CGRect zu kombinieren? Ich möchte "y: 65.0" zu einem bestehenden CGRect hinzufügen und finde keine Möglichkeit, dies zu tun. Klingt wie eine einfache Aufgabe für mich, scheint aber unmöglich in Xcode zu tun, da "+ =" zwischen CGRect nicht erlaubt ist.Kombinieren Sie zwei CGRect

BEARBEITEN: Versucht mit offsetBy und fügen Sie sie mit dem folgenden Code. Wenn die CGRect der Zugabe erhalte ich die Fehlermeldung: No '+' candidates produce the expected contextual result type 'CGRect'

var fromRect:CGRect = self.tableView.rectForRow(at: indexPath) 
    let addRect = CGRect(x: 0.0, y: 65.0, width: 0.0, height: 0.0) 

    //fromRect.offsetBy(dx: 0, dy: 65.0) 
    fromRect = fromRect + addRect 
+3

Was bedeutet "kombinieren zwei CGRect"? – user3441734

+0

Mögliches Duplikat von http://stackoverflow.com/questions/30533937/can-you-combine-cgrects-with-each-other-in-swift? Aber ich bin nicht sicher, ob es für Swift 3 funktioniert. – Moritz

Antwort

0

Oder vielleicht könnten Sie einfach einen Operator selbst implementieren:

func +(left: CGRect, right: CGRect) -> CGRect { 
    let origin = CGPoint(x: left.origin.x + right.origin.x, y: left.origin.y + right.origin.y) 
    let size = CGSize(width: left.size.width + right.size.width, height: left.size.height + right.size.height) 
    return CGRect(origin: origin, size: size) 
} 

func +=(left: inout CGRect, right: CGRect) { 
    left = left + right 
} 

aber es ist eine einfachere Lösung für dieses Problem ohne die Verwendung von Operatoren: einfach dies tun: (? ich diesen Teil bin nicht sicher, weil es scheint, dass Sie etwas komplizierter machen wollen)

rect.origin.y += 65 
+0

Was würde diese Operation in einer 2D-Ebene bedeuten? Es gibt 'CGRectIntegral' was ich verstehe, aber das nicht wirklich. –

+0

Dies ist in erster Linie eine Lösung für seine Antwort, er kann jetzt rect + = CGRect (x: 0, y: 65.0, Breite: 0, Höhe: 0) – Stormsyders

+0

Ja, deshalb habe ich die Antwort nicht downvote . Ich denke, die Frage ist schlecht. –

0

Wenn Sie ein Wollen Sie der Position eines Rect buchstäblich einen Offset hinzufügen, wie in Ihrem Beispiel für das Hinzufügen von y: 65, können Sie rect.offsetBy(dx: 0, dy: 64) verwenden.

+0

Funktioniert nicht für mich aus irgendeinem Grund. -Code i versucht: var fromRect: CGRect = self.tableView.rectForRow (at: indexPath) lassen addRect = CGRect (x: 0,0, y: 65,0, Breite: 0,0, Höhe: 0,0) // fromRect .offsetBy (dx: 0, dy: 65.0) romRect = fromRect + addRect Wenn ich versuche, die letzte Zeile Code zu verwenden, bekomme ich den Fehler "Nein '+' Kandidaten produzieren den erweiterten kontextabhängigen Ergebnistyp 'CGRect' – stackoverflowlivesmatter

+0

Ich bin mir nicht sicher, was Sie in Ihrer letzten Zeile tun.Wenn Sie versuchen, ein Rect um 65 y zu versetzen, dann lassen Sie newRect = fromRect.offsetBy (dx: 0, dy: 65.0) "+" Operator auf Rect. Die Funktion offsetBy kann verwendet werden, um die X- oder Y-Position eines Rect zu ergänzen. – charmingToad