Я предлагаю экономить код DrawRect к изображению, а затем с помощью UIImageView вместо пользовательского Посмотреть. Таким образом, это делается только один раз. Я сделал удобную категорию для UIImage, которая, я думаю, довольно аккуратная.
@implementation UIImage (CustomImage)
+ (UIImage *)imageOfSize:(CGSize)size withBlock:(void (^)(CGContextRef context))drawingBlock{
UIGraphicsBeginImageContextWithOptions(size, 0, 0);
CGContextRef context = UIGraphicsGetCurrentContext();
UIGraphicsPushContext(context);
drawingBlock(context);
UIGraphicsPopContext();
UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return outputImage;
}
Вы используете его вот так.
UIImage *myComplicatedPaintImage = [UIImage imageOfSize:tableViewCell.bounds.size withBlock:^(CGContextRef context) {
//No need to fetch context, it is provided as block argument
CGContextBeginPath(context);
CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
CGContextMoveToPoint(context, 123, 456);
CGContextAddLineToPoint(context,789,1011);
CGContextStrokePath(context);
}
Затем просто сохраните ссылку на это изображение, и для всех своих ячеек добавьте его в изображение.
UIImageView *imageView = [UIImageView alloc]initWithFrame:tableViewCell.bounds];
imageView.image = myComplicatedPaintImage;
[self.view insertSubview:imageView atIndex:0];
Почему бы не просто поставить этот пользовательский вид в виде подсмотра в ячейке? –
Это для всего вида таблицы не ячейка, она также может изменить высоту. Я рассматриваю возможность вернуться к теневому подходу, но у меня есть несколько просмотров, и я предпочел бы иметь одну вызывающую строку кода, чем несколько для каждого. Но я зациклился на том, как повторно использовать этот код. Я попытался поместить его в метод, но он не добавил слой, он, похоже, потерял ссылку на представление без ошибки. Есть идеи ? – Jules
поместите это представление под свой вид таблицы, установите цвет фона таблицы для прозрачности, и вам не нужно будет подклассифицировать таблицу, чтобы добиться того же поведения чертежа. Если вам совершенно необходимы отдельные классы - я предлагаю вам добавить метод категории «UIView» с именем, например: '- (void) drawMySuperDuperGradient: (CGRect) rect' - и вы сможете использовать его в любом' UIView' потомок. –