我正在尝试使下面的圆具有不透明的纯白色,其中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却没有任何运气。 “彩色混合图层”仍然显示圆的周围是透明的。有人知道如何解决这个问题吗?

最佳答案

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

ios - 没有混合图层的圆形UIView(带有cornerRadius)-LMLPHP

并非我所希望的那样,我希望这些单元格显示为绿色,以指示没有发生混合。为此,我将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()
    }
}

然后,我将要四舍五入的 View 设置为 Nib 中的RoundedCornerView。在那时运行产生了以下结果:

ios - 没有混合图层的圆形UIView(带有cornerRadius)-LMLPHP

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

关于ios - 没有混合图层的圆形UIView(带有cornerRadius),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26883645/

10-13 03:50