Rounded Rect/Закругленные углы для изображений в UITableView

Я использую эту категорию и создаю изображения для моего UITableView, чтобы все они были одинакового размера. Есть ли способ, чтобы изображения также имели закругленные углы? Спасибо!

+ (UIImage *)scale:(UIImage *)image toSize:(CGSize)size
{
    UIGraphicsBeginImageContext(size);
    [image drawInRect:CGRectMake(0, 0, size.width, size.height)];
    UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return scaledImage;
}

Изменить: затем я получаю изображение и другую информацию об объекте, чтобы поместить его в NSDictionary, чтобы попасть в UITableView. Я попытался изменить свойство UIImageView.layer в cellForRowAtIndexPath, но, похоже, это не помогло:

cell.TitleLabel.text = [dict objectForKey:@"Name"];
cell.CardImage.image = [dict objectForKey:@"Image"];
cell.CardImage.layer.cornerRadius = 5.0;

person Crystal    schedule 26.07.2011    source источник


Ответы (4)


Вы можете добавить отсечение к операции рисования, класс UIBezierPath делает это очень просто.

Расширьте свой код до:

+ (UIImage *)scale:(UIImage *)image toSize:(CGSize)size
{
    UIGraphicsBeginImageContext(size);
    CGRect rect = CGRectMake(0, 0, size.width, size.height);
    [[UIBezierPath bezierPathWithRoundeRect:rect cornerRadius:5] addClip];
    [image drawInRect:rect];
    UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return scaledImage;
}
person PeyloW    schedule 26.07.2011
comment
к вашему сведению, отсутствует буква «d» в bezierPathWithRoundedRect:rect. Я бы просто отредактировал ответ, но для редактирования нужно изменить минимум 6 символов. Просто подумал, что укажу на случай, если кто-то еще потратит время, пытаясь понять, почему нет известного метода bezierPathWithRoundeRect:rect и пропустил опечатку :) очень хороший ответ, хотя - person Eric D'Souza; 09.04.2013
comment
Такой подход может привести к размытым углам на устройствах с сетчаткой. Это работает очень хорошо: stackoverflow.com/a/4334902/1022589 - person That Guy; 06.02.2015

Попробуй это

image.layer.cornerRadius = 5;
person Sisu    schedule 26.07.2011

  1. Включите фреймворк QuartzCore.
  2. Импорт CALayer.h
  3. image.layer.cornerFRadius = 5;
person the.evangelist    schedule 26.07.2011

Как сказали Sisu и the.evangelist: image.layer.cornerRadius = 5;

Но вам также может понадобиться добавить:

[image.layer setMasksToBounds: YES];

person Yann Bouschet    schedule 19.08.2011