1) Вы можете создать округленные изображения в viewDidLoad (или когда ваши данные готовы) и сохранить их во временном массиве. Для этого вы просто создаете его, как вы это делаете сейчас. Затем вы фиксируете содержимое просмотра в новое изображение. После этого вы показываете вновь созданное изображение в виде таблицы без динамического маскирования.
Чтобы сохранить вид содержимого в изображение, вы можете использовать этот код:
- (UIImage*) screenshotOfView: (UIView*) view
{
UIGraphicsBeginImageContext(view.frame.size);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return viewImage;
}
ОК, я буду более конкретным. В тот момент, когда ваш demoArray
заполнен данными. Вы перебираете этот массив и предварительно визуализируете свои изображения. Вот как вы это делаете (используя упомянутый метод):
for(NSDictionary* dictionary in demoArray)
{
UIImage* originalImage = [UIImage imageNamed:[dictionary objectForKey:@"image"]];
UIImageView* tmpImageView = [[UIImageView alloc] initWithImage: originalImage];
tmpImageView.layer.cornerRadius = 9.0;
tmpImageView.layer.masksToBounds = YES;
UIImage* roundedImage = [self screenshotOfView: tmpImageView];
[dictionary setObject: roundedImage forKey: @"roundedImage"];
}
Впоследствии в вашем cellForTableRow
методе вы просто используете это изображение:
cell.imageView.image = [UIImage imageNamed:[[demoArray objectAtIndex:[indexPath row]] objectForKey:@"roundedImage"]];
(Этот код не тестировался, просто записал его ...)
2) Другим, возможно, более быстрым решением было бы нарисовать изображения в вашем подклассе tableViewCell в drawRect:
(маскируется с помощью CoreGraphics), но это намного сложнее.
3) Следуя ответу Бартоша Цехановского, вы можете динамически создавать необходимый overlayImage для каждого размера, получаемого с помощью CorGraphics. Но первое решение может быть самым простым.