我正在为我的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"];
那么图像在我的手机上正确显示,但只是太大了。
如何解决此问题?
答案 0 :(得分:0)
我自己回答这个问题。
经过几个小时的调试,问题出在这里:
在上面给出的方法中,未设置origin
的{{1}}属性。
在我设置了origin.x& origin.y为0,一切顺利。
提示:每次遇到WTF问题时,请耐心等待并尝试以不同方式测试代码。 '导致99.9%的此类案例,您的代码有问题而不是Xcode的错误。
虽然我仍然不知道为什么我的问题中的代码在模拟器中运行良好,我会放手,因为我想有一天当我成为专家时,这类问题也很容易愚蠢。