Frage

Ich habe Code, der eine Menge hat sizeWithFont anrufe, die ich dringend loswerden muss, da sizeWithFont veraltet ist.Jetzt habe ich irgendwie herausgefunden, wie man es benutzt boundingRectWithSize anstatt jedoch eine Million Aufrufe erneut auszuführen, dachte ich daran, eine Wrapper-Funktion für die sizeWithFonts zu erstellen.

Also, hier ist die Methode, die ich mir ausgedacht habe :

- (CGSize) getSizeForCurrentFont:(UIFont*)font
                    forWidth:(CGFloat)width
           constrainedToSize:(CGSize)size
               lineBreakMode:(NSLineBreakMode)lineBreakMode
                 minFontSize:(CGFloat)minFontSize
              actualFontSize:(CGFloat *)actualFontSize
{
    // functionality
}

Was ich anstrebe ist, dass nur die eingestellten Werte aufgerufen werden, während der Rest der Standardwert für sie sein wird.Wenn ein Aufruf also nur Schriftart und Breite hat, wird nur diese festgelegt.Ich verstehe, dass die Schriftgröße nicht mehr unterstützt wird, aber ich würde mich über Vorschläge dazu freuen.

Meine Frage ist :auf welche Standardwerte sollte ich Schriftart, Breite, Größe, Zeilenumbruchmodus, minFontSize und actualFontSize setzen, damit ich keine seltsamen Ergebnisse erhalte.Im Wesentlichen möchte ich das gleiche Ergebnis für :

[s sizeWithFont:font
constrainedToSize:size];

wie bei :

[s getSizeForCurrentFont:font 
forWidth:width #This is some Default Value# 
constrainedToSize:size 
lineBreakMode:lineBreakMode #This is some Default Value# 
minFontSize:minFontSize #This is some Default Value# 
actualFontSize: actualFontSize #This is some Default Value#]

Sagen Sie mir, wenn weitere Klarstellungen erforderlich sind.Wenn Sie einen netten Weg vorschlagen können, um boundingRectWithSize zu machen, dann wäre das auch cool.

War es hilfreich?

Lösung

Sie könnten Primitive in Objekte einwickeln?Also hättest du:

- (CGSize) getSizeForCurrentFont:(UIFont*)font
                    forWidth:(NSNumber*)width
           constrainedToSize:(NSValue*)size
               lineBreakMode:(NSNumber*)lineBreakMode
                 minFontSize:(NSNumber*)minFontSize
              actualFontSize:(NSNumber*)actualFontSize
{
    // functionality
}

Alle 'Standard'-Werte würden auf Null gesetzt.Für CGFloat, würden Sie sie mit erstellen:

CGFloat value = 10.0f;
NSNumber* valueObj = @(value);

Für NSValue, können Sie verwenden:

CGSize size = CGSizeMake(10.0f, 10.0f);
NSValue* sizeObj = [NSValue valueWithCGSize:size];

Die Schlüsselfrage hierbei ist, wie zwischen einem gültigen Wert und einer Abwesenheitskennung unterschieden werden kann.Normalerweise tun Sie dies entweder mit einer definierten Konstante (z NSNotFound), aber für die Typen, die Sie aufgelistet haben, existiert so etwas nicht.Hier können Objekte helfen, da das Fehlen eines Objekts inhärent auf das Fehlen eines Wertes hinweist.

Andere Tipps

sie können eine Methode erstellen:

- (CGSize) sizeWithFont:(UIFont*)font constrainedToSize:(CGSize)size {
    [self getSizeForCurrentFont:font 
        forWidth:#some Default Value# 
        constrainedToSize:size 
        lineBreakMode:#some Default Value# 
        minFontSize:#some Default Value# 
        actualFontSize:#some Default Value#]
}

Dies ist die einfachste Möglichkeit, "Standardwerte" zu erstellen.

Aktualisieren Sie Swift 4.2

 let size = CGSize(width: 0, height: 0)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top