gpt4 book ai didi

具有自定义高度的iOS drawRect

转载 作者:行者123 更新时间:2023-11-28 22:27:22 27 4
gpt4 key购买 nike

我在 viewController 上放置了一个 View ,我想在此 View 中绘制一个矩形,但具有自定义高度。我根据 viewController 中的参数确定高度。例如。如果我的参数是 50,我希望矩形的高度为 UIView 的 50%。

2个问题:

  • 如何将高度传递给自定义 drawRect?

  • 如何将矩形放置在 UIView 的底部?

我已经使用 Interface Builder 放置了 View ,并且在 UIView 的子类中实现了 drawRect,并将其用作我的 UIView 的自定义类。

所以在自定义类中我有:

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

UIColor * lightGrayColor = [UIColor colorWithRed:230.0/255.0 green:230.0/255.0 blue:230.0/255.0 alpha:1.0];

CGRect paperRect = self.bounds;

drawLinearGradient(context, paperRect, lightGrayColor.CGColor, [UIColor clearColor].CGColor);


}

void drawLinearGradient(CGContextRef context, CGRect rect, CGColorRef startColor, CGColorRef endColor)
{
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGFloat locations[] = { 0.0, 1.0 };

NSArray *colors = @[(__bridge id) startColor, (__bridge id) endColor];

CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef) colors, locations);

CGPoint startPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMinY(rect));
CGPoint endPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMaxY(rect));

CGContextSaveGState(context);
CGContextAddRect(context, rect);
CGContextClip(context);
CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);
CGContextRestoreGState(context);

CGGradientRelease(gradient);
CGColorSpaceRelease(colorSpace);
}

这在我的 View 中绘制了一个漂亮的渐变矩形,但它填充了整个 UIView。这是因为 self.bounds。

我已将属性 *height 添加到我的自定义类中,但我不知道如何从我的 viewController 中填充它。所以我希望它从 UIView 的底部开始,并使其达到我确定的高度(实际高度的 %)。

有人知道我怎样才能做到这一点吗?

最佳答案

您是否在 Interface Builder 的身份检查器中设置了自定义 View 类?

您可以从您的 viewController 设置高度属性:

((MyViewClass *) self.myView).height = myCalculatedValue;

然后实现drawRect:

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

UIColor * lightGrayColor = [UIColor colorWithRed:230.0/255.0 green:230.0/255.0 blue:230.0/255.0 alpha:1.0];

CGRect paperRect = self.bounds;
paperRect.origin.y = paperRect.size.height - self.height;
paperRect.size.height = self.height;
//assuming your height property is of CGFloat type

drawLinearGradient(context, paperRect, lightGrayColor.CGColor, [UIColor clearColor].CGColor);
}

这将从底部上方的(高度)点到底部绘制渐变

关于具有自定义高度的iOS drawRect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18526201/

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