Current I am trying to show a simple table in my iPhone application where I use UITableViewCell’s with the style UITableViewCellStyleValue1 (image to the left, detail-label right-alligned). The cells all have the default height (50.0f). Before I add an image to the cell, I resize the image to be 40×40, so that it is not the total height of the cell (I think that looks ugly).
I do this with this code:
cell.imageView.image = [UIImage imageNamed:@"icon.png"];
cell.imageView.image = [RootViewController imageWithImage:cell.imageView.image scaledToSize:CGSizeMake(40, 40)];
This is all very nice and works flawlessly. But I want to accomplish this also on the iPhone 4 (with the higher resolution screen). The problem is, that everything is scaled without problems on the iPhone 4 but the images appear very pixelated.
The reason for this is ofcourse that everything on the screen is blown up to scale to the new resolution, also the images, so the images should probably be something like 80×80. But when I resize them to 80×80 (originals are 120×120) they appear way to big, because of the scaling thing.
Is there a way to actually make my images not the complete height of a tablecell, but I want them in the higher resolution on the iPhone 4. Should I create a complete new View for this?
Oops, after the first reply I realised that my own written function was missing:
+ (UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize
{
UIGraphicsBeginImageContextWithOptions(newSize, NO, [[UIScreen mainScreen] scale]);
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
As you can see, after the first reply, I tried to get this to work with the method UIGraphicsBeginImageContextWithOptions but somehow this results in an empty image.
I assume you wrote “imageWithImage:scaledToSize:”, right?
I further assume you use “UIGraphicsBeginImageContext(yourSize)” within this call. Replace that with “UIGraphicsBeginImageContextWithOptions(yourSize, NO, 2.0)” in case your platform is iPhone 4.
The “2.0” defines the scale factor for points (you define the size in points not in pixels). On pre-retina-display a point is 1×1 pixel. On retina display a point is 2×2 pixels.
Edit:
Make sure you have a high-res version of “icon.png” in your resources called “icon@2x.png”. This is automatically loaded in case it is a retina display.