UIView中的丢失质量图像

时间:2014-06-20 15:46:33

标签: ios objective-c image uiview

我的应用上的图片出现问题。在我的滑出式菜单中,我有一个标题,我在其中放置了一个图像" header.png"它存在于两个版本" header.png"和" header@2x.png"。以下是我在我的应用程序中实现它的代码:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UIImage *originalImage = [UIImage imageNamed:@"header.png"];
    CGSize destinationSize = CGSizeMake(320, 150);
    UIGraphicsBeginImageContext(destinationSize);
    [originalImage drawInRect:CGRectMake(0,0,destinationSize.width,destinationSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();


    UIImageView *headerView = [[UIImageView alloc] initWithImage:newImage];
    headerView.frame = CGRectMake(0,0, 320,150);
    return headerView;
}

当我在手机上运行应用程序(iPhone 4s)时,我的图像是像素化的,边缘被吹了,它不是很干净......我不知道它来自哪里。< / p>

我的图像是320x150px,在72dpi中是640x300px

THX

- 编辑 -

我通过使用UIImageView解决了我的问题,见下文:

- (UIImageView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    NSString* fileName = [NSString stringWithFormat:@"header.png"];
    UIImage *newImage = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:fileName ofType:nil]];

    UIImageView *headerView = [[UIImageView alloc] initWithImage:newImage];
    headerView.frame = CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.width, 150);

    return headerView;
}

1 个答案:

答案 0 :(得分:1)

问题是UIGraphicsBeginImageContext不会为您提供视网膜图像,除非您使用UIGraphicsBeginImageContextWithOptions(destinationSize, NO, scale) scale可能类似于[UIScreen mainScreen].scale

出于好奇:你为什么不单纯使用

UIImage *newImage = [UIImage imageNamed:@"header.png"] 
return [[UIImageView alloc] initWithImage:newImage];