圆形UIView(带有cornerRadius)没有混合层

时间:2014-11-12 09:39:43

标签: ios objective-c uiview layer cornerradius

我试图让下面的圆圈有一个不透明的纯白色,其中cornerRadius会切断UIView。

UIView *circle = [[UIView alloc] initWithFrame:CGRectMake(i * (todaySize + rightMargin), 0, smallSize, smallSize)];
circle.layer.cornerRadius = smallSize/2;
circle.layer.borderWidth = 0.5;
circle.layer.backgroundColor = [UIColor whiteColor].CGColor;
circle.backgroundColor = [UIColor whiteColor];
[self addSubview:circle];

我尝试了一些设置backgroundColor和opaque而没有任何运气的事情。颜色混合图层仍然显示圆圈的周围是透明的。有人知道如何解决这个问题吗?

3 个答案:

答案 0 :(得分:13)

为避免在使用圆角时进行混合,需要在drawRect中进行舍入,而不是作为图层上的属性。我需要在我正在处理的应用程序中使用带有圆角背景的UICollectionView单元格。当我使用layer.cornerRadius时,性能受到了极大的打击。打开颜色混合层产生以下结果:

blended cells

不是我所希望的,我希望那些细胞是绿色的,表明没有发生混合。为此,我将UIView子类化为RoundedCornerView。我的实施是短暂而甜蜜的:

import UIKit

class RoundedCornerView: UIView {
    static let cornerRadius = 40.0 as CGFloat

    override func drawRect(rect: CGRect) {
        let borderPath = UIBezierPath(roundedRect: self.bounds, cornerRadius: RoundedCornerView.cornerRadius)
        UIColor.whiteColor().set()
        borderPath.fill()
    }
}

然后我将我正在舍入的视图设置为我的笔尖中的RoundedCornerView。在那一点上跑步产生了这个:

non-blended cells

滚动是黄油光滑的,不再发生任何混合。一个奇怪的副作用是视图的backgroundColor属性将为角的排除区域着色,而不是视图的主体。这意味着backgroundColor应设置为视图后面的任何内容,而不是所需的填充颜色。

答案 1 :(得分:0)

请尝试使用遮罩以避免混合和处理父/子背景颜色匹配。

FILE *fp;

if ((fp = fopen("Excursion.bin", "rb")) == NULL) {
        printf("No info added yet\n");
        exit(1);
}
while (1) {
        trip *temp = (trip*)malloc(sizeof(trip));
        if (head == NULL) {
                head = temp;
                current = head;
                current->next = NULL;
        } else {
                current->next = temp;
                current=temp;
                current->next = NULL;
        }
        if (fread(&temp->data, sizeof(excursion), 1, fp) != 1) {
                break;
                printf("Error reading file\n");
                exit(0);
        }
}
fclose(fp);

答案 2 :(得分:-1)

在视图上设置clipsToBounds或在图层上masksToBounds设置为YES