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.
    }
} 

但是,它不起作用,它的差异百分比宽度/差异百分比高度可以 > 100 =(

我需要一些可以比较 2 个 CGSize 的百分比匹配的方法或函数...例如:尺寸 200x300 与尺寸 200x250 的最佳匹配...类似于:

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

请帮助,对不起我的英语,如果您需要更多详细信息,请告诉我。谢谢。

4

1 回答 1

1

尝试类似的逻辑来计算数组中的最大数,但需要小于一个有限值。在这种情况下,计算size.width和的最大百分比平均值,size.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 回答