简单的划分没有发生

时间:2012-11-18 22:08:40

标签: objective-c ios

我正在尝试使用以下被调用的方法计算UITableViewCell和UIImageView的适当高度:

-(void)ratioCalculator
{
picH = image.size.height;
picW = image.size.width;

NSLog(@"%d = width %d = height", picW, picH);
picRatio = (picW/picH);
NSLog(@"%F", picRatio);
imageViewH = (260/picRatio);
NSLog(@"%d int", imageViewH);

return;
}

问题是,当它被调用时,picRatio = (picW/picH);似乎没有发生,因为控制台说:

2012-11-18 21:56:48.787 Name[5374:c07] 640 = width 360 = height
2012-11-18 21:56:48.788 Name[5374:c07] 1.000000
2012-11-18 21:56:48.788 Name[5374:c07] 260 int

1.000000是浮动picRatio,260是imageViewH。显然这意味着UITableViewCell和UIImageView都使用了不正确的高度,其计算方式如下:

else {
        [self ratioCalculator];
        return (imageViewH + 20);
     }

- (void)showImage:(UIImage *)theImage
{
    self.imageView.image = theImage;
    self.imageView.hidden = NO;
    [self ratioCalculator];
    self.imageView.frame = CGRectMake(10, 10, 260, imageViewH);
    self.photoLabel.hidden = YES;
}

这可能是一个愚蠢的问题,为什么这个简单的分工不起作用?再次,抱歉,如果这是一个愚蠢的问题,但它让我难过。我觉得我有点疯了。

非常感谢任何帮助,
问候,
麦克

3 个答案:

答案 0 :(得分:3)

picRatio = ((float)picW/(float)picH);

Objective-c在分割之前需要正确的iVar类型赋值。 除2个整数时,输出不是浮点数,而是整数。

所以640/360 = 1.777,这被视为一个整数,所以十进制值是忽略,这给你1,你得到。

如果你做我写的,实际上会生成一个浮点数,并给你1.777输出。

答案 1 :(得分:2)

你缺少的是将整数转换为浮动以进行浮动划分

picRatio = (picW/picH); // gives an int division if picW and picH are declared integers

picRatio = (float)(picW)/picH; // gives you a floating point division

答案 2 :(得分:0)

由于没有人发表正式答复,我认为我会这样做以帮助处于类似位置的任何人。对我的问题的评论使我走上了正确的轨道,经过进一步调查后,我发现编译器根据操作数的类型计算输出。因此,如果所有操作数都是整数,它会将int转换为目标,无论它是否为浮点数。解决方案:至少使一个操作数浮动。

希望这可以帮助处于类似位置的任何人。