2

助けが必要です。入力 CGSize (たとえば): 200x300があります。そして他のと配列CGSize's = [20x20, 100x100, 150x150, 200x100, 200x250, 300x300...]。最良の比較パーセンテージ(たとえば、200x250)を持つ配列内の最良のアイテムを見つけるのを手伝ってください...

たとえば、列挙子に使用しようとしました:

CGSize inputSize = CGSizeMake(200, 300);
for (int i = 0; i < array.count; i++)
{
    CGSize concurentSize = CGSizeZero;
    switch (i)
    {
     case 0:
     {
         concurentSize.width = 20;
         concurentSize.height = 20;
     }
     and so on...

    float differencePercentWidth = ( concurentSize.width / inputSize.width ) * 100.0;
    float differencePercentHeight = ( concurentSize.height / inputSize.height ) * 100.0;

    if (differencePercentWidth > 90 && differencePercentHeight > 90)
    {
        // FOUND best CGSize... stop
        break.
    }
} 

しかし、うまくいきません。differencePercentWidth /differencePercentHeightは > 100 =(

2 つの CGSize をパーセントで比較できるメソッドまたは関数が必要です...たとえば、サイズ 200x300 はサイズ 200x250 と最もよく一致します...

float matchesInPerсent = CGSizeCompare(firstCGSize, secondCGSize);
//matchesInPerсent = 0.6; // in percents

助けてください。英語で申し訳ありません。詳細が必要な場合はお知らせください。ありがとう。

4

1 に答える 1

1

同様のロジックを試して、配列内の最大数を計算しますが、1 つの有限値未満にする必要があります。この場合、size.widthsize.heightの最大パーセンテージ平均を計算し、1 に近い最大パーセンテージが勝者です。100% の上限値も必要な場合は、その値を 100% 未満にするロジックを挿入し、それらのサイズでも同じロジックを実行する必要があります。

これは、配列から最も近いパーセンテージ サイズを提供するコードです。

/*

sizes : array of the sizes represented in NSValue format 
size: The size for which you need closest value.

*/
- (CGSize)bestMatch:(NSArray *)sizes withSize:(CGSize)size {
        float bestMatch = 0.0;
        CGSize bestMatchSize = CGSizeZero;
        for (NSValue *value in sizes) {
            float percentage = (value.CGSizeValue.width/size.width + value.CGSizeValue.height/size.height)/2;

            //If you need greater then 100% and closes to the size
            if (percentage > 1.0) {
                percentage = -1*(percentage - 2);
            }

            if (bestMatch < percentage && percentage < 1) {
                bestMatch = percentage;
                bestMatchSize = value.CGSizeValue;
            }
        }
        //If you need best match you can return bestMatch which is closest in percentage

        return bestMatchSize;

 }
于 2015-12-29T17:50:45.663 に答える