需要你的帮助,我输入了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 可以是&gt; 100 =(
我需要一些方法或功能,可以比较2 CGSize的百分比匹配...例如:尺寸200x300是最佳匹配尺寸200x250 ...像:
float matchesInPerсent = CGSizeCompare(firstCGSize, secondCGSize);
//matchesInPerсent = 0.6; // in percents
请帮忙,对不起我的英文,如果您需要更多详情,请告诉我。感谢。
答案 0 :(得分: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;
}