将所有图像调整为相同大小

时间:2015-04-21 14:45:30

标签: ios image tableview cell rounded-corners

我以前做过这件事,但由于某种原因它没有工作。我试图在我的tableview中找到圆形图片,除了一件事,一切正常:

图片尺寸不一样,因此四舍五入不能正常工作,有些照片太荒谬了。

我使用下面的代码。

UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:identifier];

if (cell == nil) {
    cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
}

cell.imageView.layer.masksToBounds = YES;
cell.imageView.clipsToBounds = YES;;
cell.imageView.layer.cornerRadius = cell.imageView.layer.frame.size.width/2;

//Getting the picture data of the current contact
NSData *pictureData  = [[[[dataArray objectAtIndex:indexPath.section]objectAtIndex:indexPath.row]picture]data];
UIImage *picture;

//Setting the picture or a placeholder if none was found
if (pictureData == nil || pictureData.length < 15){
    picture = [UIImage imageNamed:@"placeholder.png"];
}else{
    picture = [UIImage imageWithData:pictureData];
}

cell.textLabel.text  = [[[dataArray objectAtIndex:indexPath.section]objectAtIndex:indexPath.row]compositeName];
cell.imageView.image = picture;

return cell;

考虑到一些图像视图(显然......)具有不同的尺寸,我应该怎样做以保持圆形图像。

请注意,tableview单元格和图像都具有相同的高度/宽度,它们只是得到一个不超过其高度一半的cornerradius值,但它们仍然不会更宽或更高。

1 个答案:

答案 0 :(得分:0)

在将UIImage添加到UIImageView之前,我建议您将图像大小调整为正确的大小(UIImageView的大小)。

这样,图像将被舍入,滚动时的性能会更好。

要调整图像大小,您可以使用以下方法:

- (UIImage*) scaleImage:(UIImage*)image toSize:(CGSize)newSize {
    CGSize scaledSize = newSize;
    float scaleFactor = 1.0;
    if( image.size.width > image.size.height ) {
        scaleFactor = image.size.width / image.size.height;
        scaledSize.width = newSize.width;
        scaledSize.height = newSize.height / scaleFactor;
    }
    else {
        scaleFactor = image.size.height / image.size.width;
        scaledSize.height = newSize.height;
        scaledSize.width = newSize.width / scaleFactor;
    }

    UIGraphicsBeginImageContextWithOptions( scaledSize, NO, 0.0 );
    CGRect scaledImageRect = CGRectMake( 0.0, 0.0, scaledSize.width, scaledSize.height );
    [image drawInRect:scaledImageRect];
    UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();    

    return scaledImage;
}

并像这样使用它:

cell.imageView.image = [self scaleImage:picture toSize:CGSizeMake(width, height)];