Ich erstelle eine App, in der ich UIEdgeInsetsMake
für resizableImageWithCapInsets
verwende, aber ich verstehe nicht, wie das genau funktioniert. UIEdgeInsetsMake
hat 4 Argumente:
Aber sie sind Schwimmer, also weiß ich nicht, wie ich das zu einem Bild machen soll, danke! : D
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!
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.
Ich gehe nur diesen Artikel durch, der mein gesamtes Konzept in Bezug auf UIEdgeInsetsMake
klargestellt hat.
iOS: Erstellen einer dehnbaren Schaltfläche mit UIEdgeInsetsMake