Я ничего не могу найти нигде (поисковые системы, документы, здесь, и т.д.), который показывает, как создать скругленные углы (особенно в сгруппированном табличном представлении) на элементе, который также отсекает подпредставления.
У меня есть код, который правильно создает скругленный прямоугольник из пути с 4 дугами (скругленные углы), который был протестирован в drawRect: метод в моем разделенном на подклассы uitableviewcell. Проблема - то, что подпредставления, которые, оказывается, uibuttons с их внутренним uiimageviews, делают не повинуются CGContextClip (), которому повинуется uitableviewcell.
Вот код:
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGFloat radius = 12;
CGFloat width = CGRectGetWidth(rect);
CGFloat height = CGRectGetHeight(rect);
// Make sure corner radius isn't larger than half the shorter side
if (radius > width/2.0)
radius = width/2.0;
if (radius > height/2.0)
radius = height/2.0;
CGFloat minx = CGRectGetMinX(rect) + 10;
CGFloat midx = CGRectGetMidX(rect);
CGFloat maxx = CGRectGetMaxX(rect) - 10;
CGFloat miny = CGRectGetMinY(rect);
CGFloat midy = CGRectGetMidY(rect);
CGFloat maxy = CGRectGetMaxY(rect);
[[UIColor greenColor] set];
CGContextBeginPath(context);
CGContextMoveToPoint(context, minx, midy);
CGContextAddArcToPoint(context, minx, miny, midx, miny, radius);
CGContextAddArcToPoint(context, maxx, miny, maxx, midy, radius);
CGContextAddArcToPoint(context, maxx, maxy, midx, maxy, radius);
CGContextAddArcToPoint(context, minx, maxy, minx, midy, radius);
CGContextClip(context);
CGContextFillRect(context, rect);
[super drawRect:rect];
}
Поскольку этот конкретный случай статичен (только шоу в 1 определенной строке кнопок), я могу отредактировать изображения, используемые, чтобы кнопки получили желаемый эффект.
ОДНАКО у меня есть другой случай, который является динамичным. А именно, сгруппированная таблица с большим количеством управляемых базой данных результатов, которые покажут фотографии, которые могут быть в первой или последней строке со скругленными углами и таким образом должны быть отсечены).
Так, действительно ли возможно создать CGContextClip (), который также отсекает подпредставления? Если так, как?
Создайте подкласс UIImageView
с закругленными углами и прозрачностью. Сам UITableViewCell
должен быть непрозрачным для повышения производительности.
Взгляните на этот пример .
У объекта CALayer есть функции для скругления углов:
UIView * someview = something here;
CALayer * layer = [someview layer];
layer.masksToBounds = YES;
layer.cornerRadius = radius;
И все готово. Вы также можете добавить некоторые цвета границ и прочее, посмотрите документацию, если вам интересно.
См. этот код: http://gist.github.com/292384
Я использовал его в нескольких проектах, производительность отличная и она очень настраиваемая. Он не использует cornerRadius, а рисование ячеек является контекстно-зависимым.