Изменить размер всех изображений, чтобы они были одинакового размера
Я делал это раньше, но по какой-то причине это не работает. Я пытаюсь иметь круглые картинки в моем табличном представлении, и все работает отлично, за исключением одного:
Не все изображения одинакового размера, поэтому округление не работает должным образом, а некоторые фотографии просто смешны.
Я использую код ниже.
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)];