ラッパー関数のCGFloat、CGSize、MinFontSizeなどのデフォルト値
-
24-12-2019 - |
質問
SizeWithFontが推奨されているので、私が必死に取り除く必要があるsizeWithFont
呼び出しのコードを持っています。さて、私はその代わりにboundingRectWithSize
を使用する方法を考え出しましたが、100万の通話を再生するのではなく、SizewithFontsを実行するためのラッパー関数を作ることを考えました。
だから、私が思い付く方法は次のとおりです。
- (CGSize) getSizeForCurrentFont:(UIFont*)font
forWidth:(CGFloat)width
constrainedToSize:(CGSize)size
lineBreakMode:(NSLineBreakMode)lineBreakMode
minFontSize:(CGFloat)minFontSize
actualFontSize:(CGFloat *)actualFontSize
{
// functionality
}
.
私が何が起こるのは、設定されている値のみが呼び出されますが、残りの値はそれらのデフォルト値があるべきであれます。したがって、呼び出しにフォントと幅のみがある場合は、設定されます。 FontSizeがサポートされなくなったことを理解していますが、その上の提案を感謝します。
私の質問は、フォント、幅、サイズ、LineBreakMode、MinFontSize、ActualFontSizeを設定する必要があるデフォルト値とは何ですか。基本的に、私は同じ結果が欲しいのです:
[s sizeWithFont:font
constrainedToSize:size];
.
と同様に:
[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#]
.
それ以上の説明が必要な場合は教えてください。あなたがBoundingRectWithSizeをするのが素晴らしい方法を提案することができるならば、それはそれだけでもクールです。
解決
プリミティブをオブジェクトに折り返すことができますか?だからあなたは:
を持っているでしょう- (CGSize) getSizeForCurrentFont:(UIFont*)font
forWidth:(NSNumber*)width
constrainedToSize:(NSValue*)size
lineBreakMode:(NSNumber*)lineBreakMode
minFontSize:(NSNumber*)minFontSize
actualFontSize:(NSNumber*)actualFontSize
{
// functionality
}
.
任意の 'デフォルト'値はnilに設定されます。CGFloat
の場合は、次のものを使用して作成します。
CGFloat value = 10.0f;
NSNumber* valueObj = @(value);
.
NSValue
では、次のものを使用できます。
CGSize size = CGSizeMake(10.0f, 10.0f);
NSValue* sizeObj = [NSValue valueWithCGSize:size];
.
主な問題は、有効な値と不在識別子を区別する方法です。通常、定義された定数(NSNotFound
など)を使用してこれを行いますが、そのようなことをリストしたタイプの場合は存在しません。オブジェクトの欠如が本質的に値が欠如を示すので、オブジェクトが役立つことができる場所です。
他のヒント
メソッドを作成できます。
- (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#]
}
.
これは、「デフォルト値」を作成する最も簡単な方法です。
アップデートSWIFT 4.2
let size = CGSize(width: 0, height: 0)
.