Ich frage mich, warum es zwei Arten (Grenzen/Rahmen) für die Beschreibung einer Ansicht gibt. Da das Ändern der Größe von bounds.size. * Auch die Größe von frame.size. * Ändert, und umgekehrt, bedeutet dies, dass der einzige Unterschied zwischen Rahmen und Grenzen der Ursprung ist. Warum brauchen wir also zwei unterschiedliche Typen zum Beschreiben der Ansichtsgeometrie? und was übrigens bounds.origin bedeutet genau?Warum zwei Typen (Grenzen/Rahmen) verwenden, um eine Ansicht statt einer zu beschreiben?
Antwort
von CocoaDev wird:
- Die Rahmen wird im Koordinatenraum einer Super Ansicht ausgedrückt.
- Die Grenzen werden in einem eigenen Koordinatenraum der Ansicht ausgedrückt.
Visuelle Erklärung (von Apple Developer Reference):
Referenz:http://developer.apple.com/documentation/Cocoa/Conceptual/DrawViews/Concepts/ViewHierarchy.html
danke, aber Ich kenne den Unterschied zwischen Frame/Grenzen (die Frage wurde aktualisiert, sorry), aber ich frage mich nur, warum wir zwei Arten zum Beschreiben von Ansichten benötigen, da die Größe in beiden Frame/Grenzen gleich sind. – Pwn
@ mf25 Nun ... lasst es uns so betrachten: Wenn uns ALL die Größe anging, dann hätte Apple wohl "Grenzen" und "Rahmen" abgeschrieben und einfach eine "Breite" oder "Höhe" -Eigenschaft hinterlassen. Der Grund für die Existenz von "Grenzen" und "Rahmen" ist, dass die von ihnen zurückgegebene "NSRect" -Struktur (außer den Attributen "size.width" und "size.height") die Anfangskoordinaten (X, Y) enthält. Und in dieser Hinsicht, wie oben gezeigt, unterscheiden sie sich sicher ... :-) –
Die Grenzen können größer sein und haben einen anderen Ursprung als der Rahmen; So funktionieren beispielsweise Scroll-Ansichten. Der Rahmen der Bildlaufansicht bleibt fixiert, während der Benutzer die Grenzen verschiebt. – jlehr
- 1. Wie RAML verwenden, um eine API OAuth2 zu beschreiben
- 2. Warum zwei Stapel verwenden, um eine Warteschlange zu erstellen?
- 3. Eine Abfrage statt zwei?
- 4. Zeige zwei ProgressDialog statt einer
- 5. Warum erlaubt Kotlin nicht, Latetinit mit primitiven Typen zu verwenden?
- 6. Warum App.config verwenden, um Konfigurationsdaten zu speichern?
- 7. Verwenden von zwei stark typisierten Modellen für eine MVC-Ansicht
- 8. Welche Regeln verwenden Pandas, um eine Ansicht im Vergleich zu einer Kopie zu generieren?
- 9. Verwenden JIRA Rest API, um eine Liste aller Benutzer auf einer Platine statt Projekt zu erhalten?
- 10. Warum dotenv-Bibliothek verwenden, statt ini-Datei zu analysieren?
- 11. Benutzerdefinierte Ansicht-Controller verwenden, um verschiedene Teile der gleichen Ansicht
- 12. Da Tupel unveränderlich sind, warum macht das Schneiden sie eine Kopie statt einer Ansicht?
- 13. So verwenden Sie eine Union von zwei Typen
- 14. Hohe Charts: Zwei Linien statt einer
- 15. MVC5 Kann nicht zwei Modelle in einer Ansicht verwenden
- 16. Eingebaute Typen, wenn (nicht) zu verwenden?
- 17. Was wäre ein gutes Datamodel, um ein Datamodell zu beschreiben?
- 18. Zwei GridViews in einer Ansicht
- 19. Richtiger Weg DropDownListFor mit einer Liste primitiver Typen zu verwenden?
- 20. Wie mache ich eine Variable = zwei andere statt nur einer
- 21. Warum erhöht foreach refcount um 2 statt um 1?
- 22. Verwenden Sie zwei PendingIntent in einer Ansicht in Appwidget
- 23. Eine Spalte auf Handy statt zwei Spalten
- 24. Austauschen von zwei Typen in einer Typenliste
- 25. Verwenden Sie UIPanGestureRecognizer, um die Ansicht von einer Position in eine begrenzte Position zu ziehen
- 26. CakePHP-Eine Ansicht zu einer anderen Ansicht Schaltfläche klicken Funktion
- 27. Warum Frame-> Punkte um 20 statt um 1 erhöht?
- 28. Warum verwenden Sie string :: iterator statt index?
- 29. Wie verwende ich Master-Theorem, um Rekursion zu beschreiben?
- 30. Verwenden einer Datumsfunktion für eine Spalte mit unterschiedlichen Typen
möglich Duplikat [Warum gibt es einen Rahmen Rechteck und ein Rechteck Grenzen in einem UIView?] (Http://stackoverflow.com/questions/749558/why-is-there-an-frame-rectangle-and-an-bounds-rectangle-in-an-uiview) – jlehr