634 Stimmen

Cocoa: Was ist der Unterschied zwischen dem Rahmen und den Begrenzungen?

UIView und seine Unterklassen haben alle die Eigenschaften frame y bounds . Was ist der Unterschied?

1 Stimmen

0 Stimmen

Für mich ist die prägnanteste Erklärung hier zu finden: videos.raywenderlich.com/courses/99-scroll-view-school/lessons/

1 Stimmen

Ein 2:30-Video hat nichts Prägnantes an sich. Ich kann einen oder zwei Sätze viel schneller lesen als 2:30.

11voto

m.eldehairy Punkte 697

Rahmen ist der Ursprung (linke obere Ecke) und die Größe der Ansicht im Koordinatensystem der übergeordneten Ansicht, d. h. Sie können die Ansicht in der übergeordneten Ansicht verschieben, indem Sie den Rahmenursprung ändern, Grenzen auf der anderen Seite ist die Größe und der Ursprung in seinem eigenen Koordinatensystem, so dass der Ursprung der Grenzen standardmäßig (0,0) ist.

In den meisten Fällen sind der Rahmen und die Grenzen kongruent, aber wenn Sie zum Beispiel eine Ansicht mit dem Rahmen ((140,65),(200,250)) und den Grenzen ((0,0),(200,250)) haben und die Ansicht so gekippt wurde, dass sie auf der rechten unteren Ecke steht, dann sind die Grenzen immer noch ((0,0),(200,250)), aber der Rahmen ist es nicht.

enter image description here

Der Rahmen ist das kleinste Rechteck, das die Ansicht umschließt, d. h. der Rahmen (wie auf dem Foto) ist ((140,65),(320,320)).

Ein weiterer Unterschied besteht beispielsweise darin, dass bei einer SuperView mit dem Rahmen ((0,0),(200,200)) und einer SubView mit dem Rahmen ((20,20),(100,100)) der Rahmen der SuperView auf ((20,20),(200,200)) geändert wird. Der Rahmen der SubView ist dann immer noch ((20,20),(100,100)), aber um (20,20) verschoben, da das Koordinatensystem der SuperView um (20,20) verschoben wurde.

Ich hoffe, das hilft jemandem.

0 Stimmen

zum letzten Absatz: subView Rahmen ist relativ zu seinem superView . die Änderung der superView Grenzen zu irgendetwas machen die subView Ursprung mit seinem Ursprung übereinstimmen superView .

9voto

Serg Punkte 301

Lassen Sie mich meine 5 Cents hinzufügen.

Rahmen wird von der übergeordneten Ansicht der Ansicht verwendet, um sie innerhalb der übergeordneten Ansicht zu platzieren.

Grenzen wird von der Ansicht selbst verwendet, um ihren eigenen Inhalt zu platzieren (so wie es eine Bildlaufansicht beim Scrollen tut). Siehe auch clipsToBounds . Die Grenzen können auch zum Vergrößern/Verkleinern des Inhalts der Ansicht verwendet werden.

Analogie:
Rahmen ~ TV-Bildschirm
Grenzen ~ Kamera (Zoomen, Bewegen, Drehen)

7voto

Marina Punkte 167

Alle oben genannten Antworten sind richtig, und das ist meine Meinung dazu:

Um zwischen Frame und Bounds zu unterscheiden, sollten Entwickler CONCEPTS lesen:

  1. relativ zu der übergeordneten Ansicht (eine übergeordnete Ansicht), in der sie enthalten ist = FRAME
  2. relativ zu seinem eigenen Koordinatensystem, bestimmt die Position seiner Unteransicht = BOUNDS

"bounds" ist verwirrend, weil es den Eindruck erweckt, dass die Koordinaten die Position der Ansicht sind, für die sie festgelegt wurden. Diese stehen jedoch in Relation zueinander und werden entsprechend den Rahmenkonstanten angepasst.

iPhone screen

6voto

RAGHUNATH Punkte 187

Frame ist relativ zu seiner SuperView, während Bounds relativ zu seiner NSView ist.

Beispiel: X=40,Y=60.Auch enthält 3 Ansichten.Dieses Diagramm zeigt Ihnen klare Vorstellung.

FRAME

BOUNDS

4voto

Muhammad Nayab Punkte 1472

Die obigen Antworten haben den Unterschied zwischen Bounds und Frames sehr gut erklärt.

Bounds (Grenzen): Größe und Position einer Ansicht gemäß ihrem eigenen Koordinatensystem.

Frame : Eine Ansichtsgröße und Position relativ zu ihrer SuperView.

Dann ist es verwirrend, dass im Falle von Bounds die X,Y immer "0" sein werden. Dies ist nicht wahr . Dies kann auch in UIScrollView und UICollectionView verstanden werden.

Wenn die Grenzen von x und y nicht 0 sind.
Nehmen wir an, wir haben eine UIScrollView. Wir haben eine Paginierung implementiert. Die UIScrollView hat 3 Seiten und ihre ContentSize-Breite ist dreimal so groß wie die Bildschirmbreite (nehmen wir an, die Bildschirmbreite ist 320). Die Höhe ist konstant (angenommen 200).

scrollView.contentSize = CGSize(x:320*3, y : 200)

Fügen Sie drei UIImageViews als SubViews hinzu und schauen Sie sich die x Wert des Rahmens

let imageView0 = UIImageView.init(frame: CGRect(x:0, y: 0 , width : scrollView.frame.size.width, height : scrollView.frame.size.height))
let imageView1 :  UIImageView.init( frame: CGRect(x:320, y: 0 , width : scrollView.frame.size.width, height : scrollView.frame.size.height))
let imageView2 :  UIImageView.init(frame: CGRect(x:640, y: 0 , width : scrollView.frame.size.width, height : scrollView.frame.size.height))
scrollView.addSubview(imageView0)
scrollView.addSubview(imageView0)
scrollView.addSubview(imageView0)
  1. Seite 0: Wenn sich die ScrollView auf Seite 0 befindet, sind die Bounds (x:0,y:0, Breite : 320, Höhe : 200)

  2. Seite 1: Blättern Sie und gehen Sie zu Seite 1.
    Jetzt werden die Grenzen sein (x:320,y:0, Breite : 320, Höhe : 200) Zur Erinnerung: Wir sagten, in Bezug auf sein eigenes Koordinatensystem. Der "sichtbare Teil" unseres ScrollViews hat jetzt also ein "x" von 320. Sehen Sie sich den Rahmen von imageView1 an.

  3. Seite 2: Blättern und zu Seite 2 wechseln Grenzen : (x:640,y:0, Breite : 320, Höhe : 200) Sehen Sie sich noch einmal den Rahmen von imageView2 an

Dasselbe gilt für den Fall von UICollectionView. Der einfachste Weg, collectionView zu betrachten, ist, es zu scrollen und seine Grenzen auszudrucken/zu protokollieren, und Sie werden die Idee bekommen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X