Скругленные углы UITableViewCell и подпредставления клипа

Я ничего не могу найти нигде (поисковые системы, документы, здесь, и т.д.), который показывает, как создать скругленные углы (особенно в сгруппированном табличном представлении) на элементе, который также отсекает подпредставления.

У меня есть код, который правильно создает скругленный прямоугольник из пути с 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 (), который также отсекает подпредставления? Если так, как?

9
задан Brenden 25 August 2009 в 23:52
поделиться

3 ответа

Создайте подкласс UIImageView с закругленными углами и прозрачностью. Сам UITableViewCell должен быть непрозрачным для повышения производительности.

Взгляните на этот пример .

0
ответ дан 4 December 2019 в 19:35
поделиться

У объекта CALayer есть функции для скругления углов:

UIView * someview = something here;
CALayer * layer = [someview layer];
layer.masksToBounds = YES;
layer.cornerRadius = radius;

И все готово. Вы также можете добавить некоторые цвета границ и прочее, посмотрите документацию, если вам интересно.

7
ответ дан 4 December 2019 в 19:35
поделиться

См. этот код: http://gist.github.com/292384

Я использовал его в нескольких проектах, производительность отличная и она очень настраиваемая. Он не использует cornerRadius, а рисование ячеек является контекстно-зависимым.

3
ответ дан 4 December 2019 в 19:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: