gpt4 book ai didi

iphone - 为什么我的 "initiwithframe"变黑了?使用initwithframe绘制CGRect圆角

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:20:27 24 4
gpt4 key购买 nike

这就是它的样子。我想让黑色背景变得清晰,但似乎无法弄清楚。

enter image description here

这是加载 View :

loadView { 
CGRect frame = CGRectMake(screenWidth - OFFSET, DEFAULT_PADDING, 140, 40);
miniC* mcView = [ [ [miniC alloc] initWithFrame:frame] autorelease];
mcView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
[[self view] addSubview:mcView];
}

这是我在 miniC 中调用 drawRect 的地方:

- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();

// Set Background Color & Border Color
CGColorRef bgColor = [UIColor scrollViewTexturedBackgroundColor].CGColor;
CGColorRef borderColor = [UIColor grayColor].CGColor;

CGRect Rect = self.bounds;

// Round Corners
roundCorners(context, Rect);

// Fill with bgcolor
fillBackgroundColor(context, Rect, bgColor);

// Add 1 px stroke
CGRect strokeRect = Rect;
strokeRect.size.height -= 1;
strokeRect = (strokeRect);

CGContextSetStrokeColorWithColor(context, borderColor);
CGContextSetLineWidth(context, 1.0);
CGContextStrokeRect(context, strokeRect);


// Overlay Rect to Tint "scrollViewTexturedBackgroundColor" UIColor
CGContextRef secondContext = UIGraphicsGetCurrentContext();

// Set Background Color & Border Color
CGColorRef obgColor = [UIColor colorWithRed:255/255 green:255/255 blue:255/255 alpha:.3].CGColor;

// Round Corners
roundCorners(context, Rect);

// Fill with bgcolor
fillBackgroundColor(secondContext, Rect, obgColor);

}

代码用我正在寻找的笔划绘制了圆角框,但新圆角框后面有一个黑框。我一直在尝试一堆不同的东西,但似乎无法弄清楚如何使背景颜色清晰。另外,我知道我可以用 QuartzCore 做到这一点,但我不想这样做。

附言我是 objective-c 的新手。

编辑:

void roundCorners(CGContextRef context, CGRect rect) {

CGContextClearRect(context, rect);

CGFloat c = INSET + CORNER_RADIUS;

CGContextMoveToPoint(context, INSET, c);

CGContextAddArcToPoint(context, INSET, INSET, c, INSET, CORNER_RADIUS);
CGContextAddLineToPoint(context, rect.size.width - c, INSET);
CGContextAddArcToPoint(context, rect.size.width - INSET, INSET, rect.size.width - INSET, c, CORNER_RADIUS);
CGContextAddLineToPoint(context, rect.size.width - INSET, rect.size.height - c);
CGContextAddArcToPoint(context, rect.size.width - INSET, rect.size.height - INSET, rect.size.width - c, rect.size.height -

INSET, CORNER_RADIUS); CGContextAddLineToPoint(context, c, rect.size.height - INSET);

CGContextAddArcToPoint(context, INSET, rect.size.height - INSET, INSET, rect.size.height > - c, CORNER_RADIUS);

CGContextClosePath(context);

CGContextClip(context);

CGContextSetFillColorWithColor(context, [UIColor scrollViewTexturedBackgroundColor].CGColor);
CGContextFillRect(context, CGRectMake(0, 0, rect.size.width - INSET, rect.size.height - INSET));

}

void fillBackgroundColor(CGContextRef context, CGRect rect, CGColorRef bgColor) {

CGContextSetFillColorWithColor(context, bgColor);
CGContextFillRect(context, CGRectMake(0, 0, rect.size.width, rect.size.height));

}

最佳答案

您需要设置UIView的背景色

例如

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = [UIColor clearColor];
}
return self;
}

其他一些需要考虑的东西,尤其是当你说你是这门语言的新手时。

这个赋值 CGRect Rect = self.bounds; 是多余的,因为你被传递 rect 作为方法参数,所以你可以删除它。

变量的名称 CGRect Rect 在 Objective-C 中不是很好,因为以大写字母开头的东西通常是常量,所以这可能会造成混淆并在以后引起一些问题。

这个分配 strokeRect = (strokeRect); 是多余的,它自己完成工作就很好 strokeRect.size.height -= 1;

我可能是错的,我不是核心图形专家,但我假设此 CGContextRef secondContext = UIGraphicsGetCurrentContext(); 将返回与之前相同的上下文。

关于iphone - 为什么我的 "initiwithframe"变黑了?使用initwithframe绘制CGRect圆角,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8116104/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com