在" reDraw"之后没有显示png图像。

时间:2015-10-25 17:50:35

标签: ios objective-c

我正在为我的UITabBarController的.tabBarItem项使用自定义png图像。 但我的png图像太大(64x64),所以我使用下面的方法在较小的矩形中重绘图像(例如,制作尺寸参数(25,25))。

-(UIImage*) getSmallImage:(UIImage*)image inSize: (CGSize)size
{
    CGSize originalImageSize = image.size;

    CGRect newRect = CGRectMake(0, 0, size.width, size.height);

    float ratio = MAX(newRect.size.width/originalImageSize.width,
                      newRect.size.height/originalImageSize.height);

    UIGraphicsBeginImageContextWithOptions(newRect.size, NO, 0.0);

    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:newRect cornerRadius:5.0];

    [path addClip];

    CGRect projectRect;
    projectRect.size.width = ratio * originalImageSize.width;
    projectRect.size.height = ratio * originalImageSize.height;

    //projectRect.origin.x = (newRect.size.width - projectRect.size.width) / 2.0;
    //projectRect.origin.y = (newRect.size.height - projectRect.size.height) / 2.0;
    // Draw the image on it
    [image drawInRect:projectRect];
    // Get the image from the image context
    UIImage *smallImage = UIGraphicsGetImageFromCurrentImageContext();

    // Cleanup image context resources
    UIGraphicsEndImageContext();

    return smallImage;
}

我使用的每个图像都是通过此方法返回的。在模拟器上一切都很好,但是当我在iphone上测试时,这些图像没有显示。 但是如果我放弃上面的方法并直接导入图像:self.tabBarItem.image = [UIImage imageNamed:@"Input"];那么图像在我的手机上正确显示,但只是太大了。

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

我自己回答这个问题。 经过几个小时的调试,问题出在这里: 在上面给出的方法中,未设置origin的{​​{1}}属性。 在我设置了origin.x& origin.y为0,一切顺利。

提示:每次遇到WTF问题时,请耐心等待并尝试以不同方式测试代码。 '导致99.9%的此类案例,您的代码有问题而不是Xcode的错误。

虽然我仍然不知道为什么我的问题中的代码在模拟器中运行良好,我会放手,因为我想有一天当我成为专家时,这类问题也很容易愚蠢。