webentwicklung-frage-antwort-db.com.de

Wie funktioniert UIEdgeInsetsMake?

Ich erstelle eine App, in der ich UIEdgeInsetsMake für resizableImageWithCapInsets verwende, aber ich verstehe nicht, wie das genau funktioniert. UIEdgeInsetsMake hat 4 Argumente:

  • Oben
  • Links
  • Unterseite
  • Recht

Aber sie sind Schwimmer, also weiß ich nicht, wie ich das zu einem Bild machen soll, danke! : D

59
pmerino

Nach der Dokumentation:

Mit dieser Methode fügen Sie einem Bild Großbuchstaben hinzu oder ändern die vorhandenen Großbuchstaben eines Bildes. In beiden Fällen erhalten Sie ein neues Bild zurück und das ursprüngliche Bild bleibt unberührt.

Während des Skalierens oder Skalierens des Bildes werden die von einer Kappe abgedeckten Bereiche nicht skaliert oder in der Größe verändert. Stattdessen wird der Pixelbereich, der nicht in jeder Richtung von der Kappe abgedeckt wird, von links nach rechts und von oben nach unten gekachelt, um die Bildgröße zu ändern. Diese Technik wird häufig verwendet, um Schaltflächen mit variabler Breite zu erstellen, die dieselben abgerundeten Ecken beibehalten, deren mittlerer Bereich jedoch nach Bedarf wächst oder schrumpft. Verwenden Sie für eine optimale Leistung einen gekachelten Bereich mit einer Größe von 1x1 Pixel.

Sie müssen also nur die Anzahl der Pixel verwenden, die Sie in den Werten der Funktion UIEdgeInsetsMake nicht streckbar machen möchten.

Angenommen, Sie haben ein Bild mit 21 x 50 Punkten (21 x 50 Pixel in Standardauflösung, 42 x 100 Pixel in Retina "@ 2x" -Definition) und möchten, dass dieses Bild horizontal dehnbar ist, wobei die 10 Punkte links und rechts beim Dehnen des Bildes unverändert bleiben , aber nur das 1 Punkt breite Band in der Mitte strecken. Dann verwenden Sie UIEdgeInsetsMake(0,10,0,10).

Machen Sie sich nicht die Mühe, dass es sich um Floats handelt (dies ist beispielsweise nützlich, um die Größe von Subpixeln zu ändern, aber in der Praxis werden Sie wahrscheinlich nur Ganzzahlen verwenden (oder Floats ohne Dezimalstellen).

Seien Sie vorsichtig, dies ist eine reine iOS5 + -Methode, die vor iOS5 nicht verfügbar ist. Wenn Sie ein SDK vor iOS5 verwenden, verwenden Sie stretchableImageWithLeftCapWidth:topCapHeight: stattdessen.


[EDIT] Einige Tipps verwende ich seit einiger Zeit, da ich mich nie erinnere, in welcher Reihenfolge die Felder der UIEdgeInsets Struktur sind - und In welcher Reihenfolge sollen wir die Argumente an die Funktion UIEdgeInsetsMake übergeben? Ich bevorzuge die Verwendung von die Syntax "Designated Inits" wie folgt:

UIEdgeInsets insets = { .left = 50, .right = 50, .top = 10, .bottom = 10 };

Oder wenn eine explizite Besetzung benötigt wird:

UIImage* rzImg = [image resizableImageWithCapInsets:(UIEdgeInsets){
   .left = 50, .right = 50,
   .top = 10, .bottom = 10
}];

Ich finde es besser lesbar, vor allem, um sicherzugehen, dass wir die verschiedenen Ränder/Richtungen nicht mischen!

70
AliSoftware

Aber sie sind Schwimmer, also weiß ich nicht, wie ich das auf ein Bild setzen soll

Dies ist eine UIImage-Instanzmethode. Die Art und Weise, wie Sie resizableImageWithCapInsets in einem Bild erstellen, besteht darin, zunächst diese Nachricht zu senden to ein Bild (ein UIImage).

Coole neue Funktion: Beachten Sie, dass das Bild gekachelt wird, wenn alle Kanteneinsätze Null sind. Dies funktioniert als Hintergrund für alles, was ein Hintergrundbild akzeptiert. Es funktioniert sogar in einer UIImageView.

10
matt

Ich gehe nur diesen Artikel durch, der mein gesamtes Konzept in Bezug auf UIEdgeInsetsMake klargestellt hat.

iOS: Erstellen einer dehnbaren Schaltfläche mit UIEdgeInsetsMake

3
Azhar