Изменить размер всех изображений, чтобы они были одинакового размера

Я делал это раньше, но по какой-то причине это не работает. Я пытаюсь иметь круглые картинки в моем табличном представлении, и все работает отлично, за исключением одного:

Не все изображения одинакового размера, поэтому округление не работает должным образом, а некоторые фотографии просто смешны.

Я использую код ниже.

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;

Что я должен делать, чтобы иметь круглые изображения всегда, учитывая, что некоторые изображения (по-видимому...) имеют разные размеры.

Обратите внимание, что ячейки и изображения таблицы имеют одинаковую высоту / ширину, они просто получают значение углового излучения, которое, по-видимому, не равно половине их высоты, но они все же не шире или выше.

1 ответ

Перед добавлением 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)];
Другие вопросы по тегам