0

我的显示器上有一个 UI 对象的有效尺寸列表(背景图像按我想要的方式平铺的值),我想依次获取每个对象的高度并将其四舍五入到下一个最大值在那个设置列表中。例如,如果列表包含49, 83, 114, 148, 和179,如果我通过了,1我会得到49,如果我通过了,30我会得到49,如果我通过了,50我会得到83,等等。显然我要写一个单独的方法来返回一个有效大小并依次在每个对象上调用它。

我是一个相当新的程序员,正在努力寻找一种有效的方法来做到这一点。我的想法是运行一个while循环,将值加一,直到它等于设定值之一,然后返回该设定值。这应该可行,因为不涉及小数,但我怀疑这是否是最安全的方式。有没有比循环更有效的方法?如果有人想提供示例代码或我可以使用的对象,我正在为 iPhone 使用 Objective-C。

4

2 回答 2

2

循环是正确的方法,但循环遍历值数组,直到找到适合的值。这样,如果有 5 个有效尺寸,您最多只能通过循环 5 次。我写了一个使用 NSInteger 作为类型的简短示例:

- (NSInteger)findValidSize:(NSInteger)aSize
{
    // create a NSArray containing NSNumber objects
    NSArray* validSizes = @[ @49, @83, @114, @148, @179 ];

    for (NSNumber* validSize in validSizes) {
        if (aSize <= [validSize integerValue]) {
            return [validSize integerValue];     // found it
        }
    }

    // nothing valid was found, now what? return the last valid size?
    return [[validSizes lastObject] integerValue];
}
于 2013-03-08T14:09:18.653 回答
0

你可以这样做:

-(NSInteger)nearestNumberTo:(NSInteger)number{
    NSArray *array=@[@(49), @(83), @(114), @(148), @(179)];
    NSInteger nearest=[array[0]integerValue];
    /*
    for (NSInteger index=0; index<array.count; index++) {
        if ([array[index]integerValue]>=number){
            nearest=[array[index]integerValue];
            break;
        }
    }
    */
    for (NSNumber *num in array) {
        if ([num integerValue]>=number){
            nearest=[num integerValue];
            break;
        }
    }
    return nearest;
}

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{
    //49, 83, 114, 148, and 179
    NSInteger minimum=[self nearestNumberTo:86];
    NSLog(@"%ld",minimum);

}
于 2013-03-08T14:20:23.783 回答